在Python(3.6)中,我尝试在celery任务(celery 3.1.17)中创建进程(使用多重处理),但它给出了错误:
守护进程不允许有子进程
代码
def mp():
with concurrent.futures.ProcessPoolExecutor(max_workers=90) as executor:
data = executor.map(pdfocr,[no for no in list(json.keys())])
使用
-P threads
参数启动worker:
celery worker -P threads
Celery 版本 >= 4.4.0 已正式支持
参考:https://github.com/celery/celery/issues/4525#issuecomment-566503932
尝试使用
billiard
包可以解决这个问题。我在使用 prefect
和 dask
时修复了同样的问题。
import billiard
from concurrent.futures import ProcessPoolExecutor
ProcessPoolExecutor(mp_context=billiard)