Yêu cầu thg 9 3, 2020 11:09 SA 85 0 1
  • 85 0 1
0

Hỏi về gem Parallel trong Ruby

Chia sẻ
  • 85 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 CÂU TRẢ LỜI


Đã trả lời thg 9 4, 2020 3:09 SA
Đã được chấp nhận
+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.

Chia sẻ
Avatar DcQ @dcqbean
thg 9 24, 2020 3:00 SA

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

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí