Asked Sep 3rd, 11:09 AM 52 0 1
  • 52 0 1
0

Hỏi về gem Parallel trong Ruby

Share
  • 52 0 1

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 ạ .

1 ANSWERS


Answered Sep 4th, 3:09 AM
Accepted
+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.

Share
DcQ @dcqbean
Sep 24th, 3:00 AM

thanks ạ 😃)) e đang sử dụng hash kiểu tương tự như này để init nhiều biến

+1
| Reply
Share