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