我正在实现 python-rq 以在队列中传递域并使用 Beautiful Soup 抓取它。所以我正在运行多个 worker 来完成工作。截至目前,我启动了 22 个 worker ,所有 22 个 worker 都在 rq 仪表板中注册。但是一段时间后,工作人员自行停止并且没有显示在仪表板中。但是在 webmin 中,它显示所有工作人员都在运行。爬行速度也降低了,即 worker 没有跑。我尝试使用 supervisor 和 nohup 来运行 worker。在这两种情况下, worker 都会自行停止。
这是什么原因?为什么 worker 会自己停下来?我们可以在一台服务器上启动多少个 worker?
除此之外,每当有工作人员从 rq 仪表板注销时,失败计数就会增加。我不明白为什么?
请帮我解决这个问题。谢谢你
最佳答案
好的,我发现了问题。这是因为 worker 超时。
try:
--my code goes here--
except Exception, ex:
self.error += 1
with open("error.txt", "a") as myfile:
myfile.write('\n%s' % sys.exc_info()[0] + "{}".format(self.url))
pass
所以根据我的代码,如果从每个域中获取 200 个 url,则下一个域将出列。但是对于某些域来说,没有足够的 url 数量来终止条件(比如只有 1 或 2 个 url)。
因为代码捕获所有异常并附加到 error.txt
文件。甚至 rq 超时异常 rq.timeouts.JobTimeoutException
也被捕获并附加到文件中。从而使 worker 等待 x
时间,从而导致 worker 终止。
关于python-2.7 - python-rq worker自动关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37982703/