小编典典

python-rq worker自动关闭

redis

我正在实现python-rq以在队列中传递域并使用Beautiful
Soup对其进行抓取。因此,我正在雇用多名工人来完成工作。到目前为止,我已经开始了22位工作人员,所有22位工作人员都在rq仪表板中注册。但是一段时间后,工作人员会自行停下来,也不会显示在仪表板上。但是在webmin中,它将所有工作程序显示为正在运行。爬行速度也降低了,即工人没有在奔跑。我尝试使用主管和nohup运行该工作程序。在两种情况下,工人都自己停车。

这是什么原因呢?为什么工人会自己停下来?在一台服务器上可以启动多少个工人?

随之而来的是,每当从rq仪表板上取消注册工作人员时,失败的计数就会增加。我不明白为什么?

请帮我解决一下这个。谢谢


阅读 473

收藏
2020-06-20

共1个答案

小编典典

好吧,我知道了问题所在。这是因为工人超时。

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.timeouts.JobTimeoutException捕获了rq超时异常,并将其附加到文件中。因此使工人等待x一段时间,这导致工人的解雇。

2020-06-20