在基于celery的网络应用中运行使用并发功能的python程序

时间:2018-12-12 07:39:54

标签: python django celery concurrent.futures

我正在使用celery进行分布式异步处理的Django应用程序。现在,我的任务是集成一个最初由并发代码编写的过程。所以我的问题是,这项工作与并发期货处理工作能否在芹菜任务队列中进行。它会引起任何问题吗?如果是这样,那将是前进的最佳方式。较早编写的并发过程会占用大量资源,因为它可以避免使用GIL。另外,由于它,它的速度非常快。不仅该进程使用并发.futures.ProcessPoolExecutor,而且在其中还包含其他(<5)个并发.futures.ThreadPoolExecutor作业。

所以现在真正的问题是,我们应该提取该过程的所有核心功能并通过将它们作为celery应用程序任务破坏而重新编写,还是保留原始代码并将其作为celery队列中的一大段代码运行

根据系统的设计,系统的用户可以提交几个此类芹菜任务,其中包含并发的期货代码。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

您的库应该可以正常工作。在Celery中运行线程代码没有什么害处,除非您将gevent与非gevent兼容代码混在一起。

造成代码破裂的原因是为了进行资源管理(减少内存/ CPU开销)。使用线程时,您要监视的是CPU负载。一旦您的并发导致足够的负载(例如,执行CPU密集型工作的线程),操作系统将开始在线程之间进行交换,并且您的处理将变慢而不是变快。