Ruby 在Sidekiq worker中使用Eventmachine http请求
假设我有一个sidekiq进程,它发送一个我不想等待的httppost请求。我不希望这成为阻碍工人速度的因素 我的一个想法是将这个简单的示例代码用于EventMachine Http请求Ruby 在Sidekiq worker中使用Eventmachine http请求,ruby,sinatra,eventmachine,sidekiq,Ruby,Sinatra,Eventmachine,Sidekiq,假设我有一个sidekiq进程,它发送一个我不想等待的httppost请求。我不希望这成为阻碍工人速度的因素 我的一个想法是将这个简单的示例代码用于EventMachine Http请求 EventMachine.run do http = EventMachine::HttpRequest.new("http://www.example.com").post :options => {...} http.callback do puts "got a re
EventMachine.run do
http = EventMachine::HttpRequest.new("http://www.example.com").post :options => {...}
http.callback do
puts "got a response"
puts http.response
EventMachine.stop
end
puts "worker finished"
end
因此,假设我的工作进程在调用回调之前完成。这里会发生什么?这是否意味着指向回调的指针将失败?我想了解这里的控制流程 在调用
EventMachine.stop
之前,EventMachine.run
块不会返回。因此,在您的情况下,如果不运行回调,工作进程将无法完成。调用EventMachine.run
块将不会返回,直到您调用EventMachine.stop
。因此,在您的情况下,如果不运行回调,工作进程将无法完成。取决于您需要什么:
Sidekiq工人非常轻。在等待响应时,您可以运行更多的程序来利用CPU
根据您的需要:
Sidekiq工人非常轻。在等待响应时,您可以运行更多的程序来利用CPU
那么,有没有什么方法可以让worker完成并仍然异步发布http请求。这就是您的示例的行为,只是它会在完成之前输出“worker finished”,因为您的
put
位于run
块内。因此,有没有任何方法可以让工作进程完成并仍然异步发布http请求。这将是您的示例的行为,只是它将在完成之前输出“worker finished”,因为您的put
位于run
块内。谢谢,我也喜欢sidekiq,但是遇到了工人无误死亡的问题。我认为这可能与非线程安全的代码有关,但乍看起来似乎还不错。谢谢,我也喜欢sidekiq,但遇到了工人死而无憾的问题。我认为这可能与非线程安全代码有关,但乍一看似乎还不错。