我正在实现python-rq以在队列中传递域并使用Beautiful Soup对其进行抓取。因此,我正在雇用多名工人来完成工作。到目前为止,我已经开始了22位工作人员,所有22位工作人员都在rq仪表板中注册。但是一段时间后,工作人员会自行停下来,也不会显示在仪表板上。但是在webmin中,它将所有工作程序显示为正在运行。爬行速度也降低了,即工人没有在奔跑。我尝试使用主管和nohup运行该工作程序。在两种情况下,工人都自己停车。
这是什么原因呢?为什么工人会自己停下来?在一台服务器上可以启动多少个工人?
随之而来的是,每当从rq仪表板上取消注册工作人员时,失败的计数就会增加。我不明白为什么?
请帮我解决一下这个。谢谢
好吧,我知道了问题所在。这是因为工人超时。
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一段时间,这导致工人的解雇。
error.txt
rq.timeouts.JobTimeoutException
x