我正在创建一个django Web服务器,该服务器允许用户在本地机器上运行一些"可执行文件",并通过网页分析其输出。
我以前使用过Celery任务队列,以便在类似情况下运行"可执行文件"。然而,在阅读了Python concurrent.futures之后,我开始怀疑是否应该使用ThreadPoolExecutor
或ProcessPoolExecutor
(或ProcessPoolExecutor
:D中的ThreadPoolExecutor
)?
在谷歌上搜索,我只找到了一个将芹菜与龙卷风进行比较的相关问题,它转向了单独使用龙卷风。
那么,对于我的简单Web服务器,我应该使用Celery还是PoolExecutor
?为什么?
如果:,则需要使用芹菜
- 您希望轻松地独立于Web服务器进行扩展
- 您想要一种方法来监视您的任务,并在任务失败时重试
- 您想要创建更高级的任务执行模式(例如,将它们链接起来)
除此之外,这是一个非常成熟的库,带有辅助项目,可以帮助您在UI演示方面,看看Jobtastic。
如果您不需要列出的任何一点,而只需要执行此任务,而不关心状态,也不需要特别的可扩展性需求,那么只需保持简单即可。
关于使用ThreadPoolExecutor
或ProcessPoolExecutor
,请记住,第二个将只能接收和返回可拾取对象,第一个将生成附加到主进程的子线程(如果您没有在另一个分离的进程中使用它,则可能是您的Web服务器),因此根据实现的细节,混合它们的方法是有意义的。