在Python中定义工作池的适当方法

时间:2014-10-30 20:33:40

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

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

其他类型的工作者是analyzers,其功能是分析推文内容并从中提取信息,同时将结果存储在数据库中。由于我将分析很多推文,因此也可以拥有这类工作人员。

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

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

1 个答案:

答案 0 :(得分:1)

  1. 是的,对我来说这看起来很好。

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

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

  4. 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. 是的,您可以在不同的网络上安装远程工作。