【问题标题】:Appropriate method to define a pool of workers in Python在 Python 中定义工人池的适当方法
【发布时间】:2014-10-30 20:33:40
【问题描述】:

我已经启动了一个新的 Python 3 项目,我的目标是下载推文并对其进行分析。由于我将下载来自不同主题的推文,我希望有一个工作人员池,这些工作人员必须使用给定的关键字从 Twitter 状态下载并将它们存储在数据库中。我将这个工人命名为fetchers

另一种工作人员是analyzers,其功能是分析推文内容并从中提取信息,并将结果也存储在数据库中。由于我将分析大量推文,因此拥有一批此类员工也是一个好主意。

我一直在考虑为此使用 RabbitMQ 和 Celery,但我有一些问题:

  • 一般问题:真的是解决这个问题的好方法吗?
  • 每个下载任务至少需要一个fetcher worker,这可能会运行一整年(实际上是一个 15 分钟的循环,重复并持续一年)。定义“无限”任务是否合适?
  • 我一直在尝试 Celery,我使用延迟来启动一些示例任务。想法是我不想不断调用 ready() 方法来检查任务是否完成。是否可以定义回调?我说的不是 celery 任务回调,只是我自己定义的一个函数。我一直在寻找这个,但我没有找到任何东西。
  • 我想要一个 RabbitMQ + Celery 服务器,在不同的网络中工作。是否可以定义远程工作者?

【问题讨论】:

  • 对不起我的错。我太仓促了。

标签: python python-3.x twitter rabbitmq celery


【解决方案1】:
  1. 是的,这对我来说是个不错的方法。

  2. 没有无限任务这回事。您可能会重新安排一个任务,让它偶尔运行一次。 Celery 有periodic tasks,因此您可以安排一个任务,使其在特定时间运行。你不一定需要芹菜。如果需要,您也可以使用 cron 作业。

  3. 您可以在任务成功完成后调用函数。

from celery.signals import task_success

 @task_success(sender='task_i_am_waiting_to_complete')
 def call_me_when_my_task_is_done():
     pass
  1. 是的,您可以在不同的网络上进行远程工作。

【讨论】:

  • 2.它并不完全是无限的。我调用了任务,15 分钟后任务应该停止并执行第二个任务,完成后再次调用第一个任务。这直到我停止它(也许这里不是真正的工人。我可以为此使用烧瓶并创建一个简单的 API)。 3. 所以我在工人和调用工人任务的客户中需要芹菜。完美的。我很难找到这个。 4. 我在哪里可以找到这方面的一些信息?我什么也没找到。
猜你喜欢
  • 2017-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-22
  • 2019-03-13
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
相关资源
最近更新 更多