Celery与ProcessPoolExecutor / ThreadPoolExecutor

时间:2016-05-18 05:00:29

标签: python django multiprocessing celery concurrent.futures

我正在创建一个django网络服务器,允许用户运行一些"可执行文件"在本地计算机上并通过网页分析其输出。

我之前使用过Celery任务队列来运行"可执行文件"在类似的情况下。但是,在阅读了Python concurrent.futures之后,我开始怀疑是否应该在ThreadPoolExecutor内使用ProcessPoolExecutorThreadPoolExecutor(或ProcessPoolExecutor:D )而不是?

谷歌搜索我只能找到one relevant question将芹菜与龙卷风进行比较,并且单独使用龙卷风。

我应该在我的简单网络服务器上使用Celery还是PoolExecutor,为什么?

1 个答案:

答案 0 :(得分:5)

如果出现以下情况,您需要使用芹菜

  1. 您希望轻松独立于网络服务器进行扩展
  2. 您想要一种监控任务的方法,并在失败时重试它们
  3. 您想要创建更高级的任务执行模式(例如,链接它们)
  4. 除了这是一个非常成熟的图书馆,其侧面项目也可以帮助您进行UI演示,请查看Jobtastic

    如果您不需要任何列出的要点,您只需要执行此任务,而无需关心状态,也不需要特殊的可扩展性需求,而不仅仅是保持简单。

    关于使用ThreadPoolExecutorProcessPoolExecutor,请记住,第二个只能接收和返回可选择的对象,并且第一个将生成附加到主进程的子线程(可能是您的Web服务器)如果你没有在另一个独立的过程中使用它,那么混合它们的方法可能有意义,具体取决于你的实现细节。