0
Hỏi về gem Parallel trong Ruby
Em có một số thắc mắc muốn hỏi về cách đếm vòng lặp khi sử dụng gem Parallel mong mọi người giúp đỡ.
Parallel.map(items, in_threads: 5) do |item|
...
end
Làm sao để tính loop_count từng thread ạ, e đang muốn là ví dụ có 1000 items chạy 5 thread mỗi thread chạy đủ 100 lần sẽ sleep 100s rồi mới chạy tiếp ạ .
Thêm một bình luận
1 CÂU TRẢ LỜI
+3
Nếu bạn dùng chế độ thread, thì có thể làm đơn giản như sau:
count = [0, 0, 0, 0, 0]
Parallel.map(items, in_threads: 5) do |item|
count[Parallel.worker_number] += 1
sleep(100) if count[Parallel.worker_number] % 100 == 0
# process(item)
end
Chỉ jRuby hay mấy bản phân phối Ruby không có GIL/GVL thì mới có multithread thực thụ nhé. Còn nếu dùng bản phân phối MRI (phổ biến nhất) thì nó sẽ mãi thực thi ở thread 0, trừ khi có tác vụ blocking (I/O hay ví dụ sleep
như ở trên) thì các thread khác mới được sử dụng.
thanks ạ )) e đang sử dụng hash kiểu tương tự như này để init nhiều biến