即使终止池,子进程也无法停止 运行
sub-processes cannot stop running even if terminating pool
我尝试map_async一个函数对象列表。由于在该函数中,将执行一些数据库插入,我必须终止池以确保数据库连接被终止(之前我没有这样做并且我得到错误 'too many connections' for MySQL)。这将在 for 循环中迭代,例如:
for name in names:
data = prepare_data(name)
p = Pool(8)
res = p.map_async(target, data)
res.get(timeout=300)
p.terminate()
在大多数情况下,这些代码运行良好。多个子进程中的数据库连接在终止池后被清理。虽然在某些情况下,最后一个循环中的任务仍在执行(日志显示数据库插入正在执行),并且 prepare_data() 也开始执行。日志显示 prepare_data() 和 map_async 中的目标函数同时执行。
这似乎是有线的,因为如果在最后一个循环中,池已终止,那么在当前循环中,当 prepare_date 时,我应该看不到目标函数中的任何日志信息。
您需要加入池以等待其清理。
由于您没有加入池,您的软件退出得太快,子进程突然终止。
我尝试map_async一个函数对象列表。由于在该函数中,将执行一些数据库插入,我必须终止池以确保数据库连接被终止(之前我没有这样做并且我得到错误 'too many connections' for MySQL)。这将在 for 循环中迭代,例如:
for name in names:
data = prepare_data(name)
p = Pool(8)
res = p.map_async(target, data)
res.get(timeout=300)
p.terminate()
在大多数情况下,这些代码运行良好。多个子进程中的数据库连接在终止池后被清理。虽然在某些情况下,最后一个循环中的任务仍在执行(日志显示数据库插入正在执行),并且 prepare_data() 也开始执行。日志显示 prepare_data() 和 map_async 中的目标函数同时执行。
这似乎是有线的,因为如果在最后一个循环中,池已终止,那么在当前循环中,当 prepare_date 时,我应该看不到目标函数中的任何日志信息。
您需要加入池以等待其清理。
由于您没有加入池,您的软件退出得太快,子进程突然终止。