【问题标题】:Does (django-) celery fork itself?(django-) celery 本身会分叉吗?
【发布时间】:2013-07-19 05:29:04
【问题描述】:

celery 是否会为每项任务自行分叉? 假设我有这样的事情:

obj = object()

@celery.task
def print_id():
   print id(obj)

#another server
print_id.delay()
print_id.delay()
print_id.delay()

多次调用任务时(不重启celery),id是不是一直一样?

【问题讨论】:

    标签: python concurrency celery django-celery


    【解决方案1】:

    这取决于。见concurency docs

    如果您使用multiprocessing 设置至少两个工作人员,id 将不会保持不变。即使您使用一个节点,并在X 任务执行(芹菜工作者中的一个选项)之后重新启动它,id 也不会保持不变。

    基本上你不应该在你的代码中依赖它。通过 Celery 运行任务的真正目的是分发它们。

    我可以问为什么这样的问题吗?您有任何需要的用例吗?

    【讨论】:

    • 谢谢!我只是想了解我们的系统是如何工作的。我们有一个全局对象,它持有一个连接到外部系统的连接器。如果此连接器不存在,则会创建它。但从你所说的,连接器不会一直都是一样的。所以我们会有多个连接器。
    猜你喜欢
    • 2012-12-28
    • 2021-09-27
    • 2014-03-12
    • 2019-11-15
    • 2017-03-01
    • 2015-02-13
    • 1970-01-01
    • 1970-01-01
    • 2017-05-15
    相关资源
    最近更新 更多