我遇到了多处理问题.Pool。看起来似乎是一个未知的原因multiprocessing.Pool没有启动进程。我执行apply_async但它从不启动进程。
我有一个调度程序,它从数据库(PostgreSQL)队列中获取工作并使用apply_async启动进程。
这是一个后端系统,它启动了大量的流程,每天大约30k。它通常可以工作,但有时一段时间后(一天,一周,两周等等),池停止调用launchProcessWork。
这里简化了代码:
def launchProcessWork(id_work):
work = SchedulerWorker(id_work)
return (id_work,work.run())
def poolcallback(r):
id_work = r[1]
result = r[2]
finishwork(id_work,result)
pool = Pool(processes=self.__nparallel,initializer=proc_initializer,initargs=(format,))
while True:
# get next works from database (Postgresql)
works = model.getWorks()
for w in works:
# Check if the process is already in the poll
if not isworkatpoll(w):
pool.apply_async(func=launchProcessWork, args=(w["id"],),callback=poolcallback)
我知道这真的很奇怪(可能是我系统的并发问题),但我想知道是否有人尝试过类似的问题。
我正在使用Docker运行它,如果它有帮助......