首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调用子进程的celery任务的CPU并发行为

调用子进程的celery任务的CPU并发行为
EN

Stack Overflow用户
提问于 2014-05-09 05:01:20
回答 1查看 1.6K关注 0票数 2

我有一个celery任务,它使用subprocess.Popen()调用一个可执行文件,该文件执行一些CPU密集型数据处理。它工作得很好,但没有充分利用celery worker并发性。

如果我用--concurrency 8 -P prefork启动celeryd,我可以用ps aux | grep celeryd确认已经产生了8个子进程。好的。

现在,当我并行启动3个任务时,我看到所有3个任务都由一个孩子工作者执行:[2014-05-08 13:41:23,839: WARNING/Worker-2] running task a... [2014-05-08 13:41:23,839: WARNING/Worker-4] running task b... [2014-05-08 13:41:24,661: WARNING/Worker-7] running task c...

..。在成功完成之前,它们会运行几分钟。但是,当您观察这段时间内的CPU使用率时,可以清楚地看到,尽管有另一个空闲的内核,但所有三个任务都共享同一个CPU:

如果我再添加两个任务,每个子进程将占用该CPU的约20%,等等。

我希望每个子芹菜进程(通过prefork方法使用multiprocessing.Pool创建)都能够独立操作,并且不会被限制在单个内核上。如果不是,我如何通过CPU绑定的celery任务充分利用多个CPU核心?

EN

回答 1

Stack Overflow用户

发布于 2014-05-09 08:19:48

根据

http://bugs.python.org/issue17038https://stackoverflow.com/a/15641148/519385

有一个问题,一些C扩展扰乱了核心亲和力,并阻止多进程访问所有可用的CPU。这个解决方案是一个彻底的技巧,但似乎是有效的。

os.system("taskset -p 0xff %d" % os.getpid())

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23552468

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档