gpt4 book ai didi

python - 守护进程不允许有 child

转载 作者:太空狗 更新时间:2023-10-29 21:10:48 26 4
gpt4 key购买 nike

我知道这是一个常见问题,相关问题如 this ,但我想寻求适合我的场景的最佳方法,因为我现在还没有使用 celery 。

我的服务场景会使用multiprocessing.Process来创建multi-campaign order,在每个campaign order中,它仍然使用multiprocessing.Process来创建multi-ad(campaign和ad是1toM的关系)。

如您所知,如果我在事件和广告创建部分都设置了多进程,它将失败并显示“守护进程不允许有 child ”,我认为 celery 可能会遇到类似的问题,即使我没有使用过现在。

我的问题是,解决这类问题的一般方法是什么?我应该仍然使用 celery ,还是使用任何方法来解决它?

非常感谢

最佳答案

1。一般好的解决方法

你应该使用消息队列来解耦

例如,

  1. 主程序,创建任务,推送到queue_1

  2. multi-campaign worker 从 queue_1 获取任务,处理并将一些multi-ad task 推送到 queue_2

  3. 多广告工作人员从 queue_2 获取任务,处理,完成。

逻辑简单,容易自己实现。还有一些现有的库用于此类内容,例如 rq/celery

2。简单的解决方法

如果得到 AssertionError ,改用线程

def run_in_subprocess(func, *args, **kwargs):
from multiprocessing import Process
thread = Process(target=func, args=args, kwargs=kwargs)
thread.daemon = True
thread.start()
return thread

def run_in_thread(func, *args, **kwargs):
from threading import Thread
thread = Thread(target=func, args=args, kwargs=kwargs)
thread.daemon = True
thread.start()
return thread

def run_task(config):
try:
run_in_subprocess(xxxx_task, config)
except AssertionError:
print('daemonic processes are not allowed to have children, use thread')
run_in_thread(xxxx_task, config)

我在一些演示应用中使用了这段代码,但我不建议在生产中使用。

关于python - 守护进程不允许有 child ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39140646/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com