python-2.7 - python-rq worker自动关闭

标签 python-2.7 redis python-rq

我正在实现 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/

相关文章:

python - 使用 pyodbc 时为 "CREATE ... statement not allowed within multi-statement transaction"

python - 向列添加前导零

node.js - 如何使用 Node 将二进制对象存储在redis中?

python - 在 Django 中测试 django-rq ( python-rq ) 的最佳实践

python - 如何自定义python rq的日志系统?

python - Pyqt 鼠标悬停在 QPushButton 上

python - Kivy 在移动时获取 Widget 在 Scatter 中的位置

redis - 如何快速有效地删除 Redis 键

redis - 如何在redis中获取设置项的空闲时间

python-rq Queue.job_ids 始终为空