Tôi đang viết một tác vụ cào sẽ được gọi mỗi phút (có thể sau mỗi 30 giây trong tương lai) bởi Bất cứ khi nào, và nó liên lạc điểm đầu cuối API (mỗi người dùng trong cơ sở dữ liệu của chúng tôi). Rõ ràng, điều này là không hiệu quả chạy như một chủ đề duy nhất, nhưng nó có thể đa luồng? Nếu không, có một thư viện HTTP dựa trên sự kiện tốt sẽ có thể hoàn thành công việc không?Nhiệm vụ cào đa luồng
Trả lời
Tôi đang viết một nhiệm vụ cào mà có thể gọi mỗi phút (có thể mỗi 30 giây trong tương lai) bằng cách Bất cứ khi nào
Cẩn thận với Rails thời gian khởi động, nó có thể là tốt hơn để sử dụng một forking mô hình như Resque hoặc Sidekiq, Rescue cung cấp https://github.com/bvandenbos/resque-scheduler mà sẽ có thể làm những gì bạn cần, tôi không thể nói về Sidekiq, nhưng tôi chắc chắn rằng nó có một cái gì đó tương tự có sẵn (Sidekiq là mới hơn Resque)
Rõ ràng, điều này không hiệu quả chạy như một sợi đơn , nhưng có thể đa luồng không? Nếu không, có một thư viện HTTP dựa trên sự kiện tốt sẽ có thể hoàn thành công việc không?
tôi muốn đề nghị bạn nhìn vào ActiveRecord's find_each
cho mẹo để làm cho quá trình tìm bạn hiệu quả hơn, một khi bạn có lô của bạn, bạn có thể dễ dàng làm điều gì đó sử dụng chủ đề như:
#
# Find each returns 50 by default, you can pass options
# to optimize that for larger (or smaller) batch sizes
# depending on your available RAM
#
Users.find_each do |batch_of_users|
#
# Find each returns an Enumerable collection of users
# in that batch, they'll be always smaller than or
# equal to the batch size chosen in `find_each`
#
#
# We collect a bunch of new threads, one for each
# user, eac
#
batch_threads = batch_of_users.collect do |user|
#
# We pass the user to the thread, this is good
# habit for shared variables, in this case
# it doesn't make much difference
#
Thread.new(user) do |u|
#
# Do the API call here use `u` (not `user`)
# to access the user instance
#
# We shouldn't need to use an evented HTTP library
# Ruby threads will pass control when the IO happens
# control will return to the thread sometime when
# the scheduler decides, but 99% of the time
# HTTP and network IO are the best thread optimized
# thing you can do in Ruby.
#
end
end
#
# Joining threads means waiting for them to finish
# before moving onto the next batch.
#
batch_threads.map(&:join)
end
này sẽ bắt đầu có nhiều hơn batch_size
chuỗi, chờ sau mỗi batch_size
để hoàn tất. Bạn có thể làm điều gì đó như thế này, nhưng sau đó bạn sẽ có một số chủ đề không kiểm soát được, có một giải pháp thay thế bạn có thể hưởng lợi từ đây, nó phức tạp hơn bao gồm cả ThreadPool và danh sách công việc được chia sẻ làm, tôi đã đăng nó như tại Github so'as không spam stackoverflow: https://gist.github.com/6767fbad1f0a66fa90ac
- 1. cào biến nhiệm vụ
- 2. Kết hợp nhiều nhiệm vụ cào cào vào một nhiệm vụ
- 3. bao gồm các nhiệm vụ cào trong đá quý
- 4. Ruby on Rails: gỡ lỗi nhiệm vụ cào
- 5. Tại sao một số nhiệm vụ cào bị thiếu?
- 6. Xử lý nhiệm vụ cào chạy rất dài
- 7. Sự kiện đa nhiệm sự kiện/nhiệm vụ C++
- 8. Nhiệm vụ tối đa trong TPL?
- 9. Tăng tốc một nhiệm vụ bằng cách sử dụng đa xử lý hoặc luồng
- 10. Dịch vụ Windows đa luồng trong MingW
- 11. Đa luồng trong LLVM
- 12. ActiveRecord :: ConnectionNotEstablished trong một nhiệm vụ rake
- 13. Grunt đa nhiệm vụ ném lỗi EISDIR khi xây dựng
- 14. Tôi có nhiệm vụ Rails: tôi có nên sử dụng tập lệnh/runner hoặc cào không?
- 15. Cách đơn giản để tắt các nhà quan sát trong khi thực hiện nhiệm vụ cào?
- 16. Làm thế nào để lấy PID của nhiệm vụ cào hiện tại?
- 17. Yêu cầu một viên đá quý bên trong nhiệm vụ cào của đá quý
- 18. Đa luồng trong Lua
- 19. Nên .Net 4.0 Nhiệm vụ luôn là phương pháp ưu tiên cho các ứng dụng đa luồng?
- 20. đa xử lý hoặc luồng trong python?
- 21. Có một "method_missing" cho các tác vụ cào không?
- 22. Rake nhiệm vụ w/lập luận splat
- 23. Đa luồng
- 24. Đa luồng trong PHP
- 25. Có thể làm việc với cào cào không?
- 26. ContinueWith một hủy nhiệm vụ
- 27. Vô hiệu hóa tác vụ cào
- 28. Đa luồng và đa xử lý
- 29. Vòng đời nhiệm vụ
- 30. hoàn thành nhiệm vụ
ThreadPool trông tuyệt vời! Tôi sẽ thử nó ra –
Thứ tốt, cảm ơn :) – Robin