Da *_*ang 9 python multiprocessing
尝试在Python中创建嵌套子进程时,我观察到了这种行为.这是父程序parent_process.py:
import multiprocessing
import child_process
pool = multiprocessing.Pool(processes=4)
for i in range(4):
pool.apply_async(child_process.run, ())
pool.close()
pool.join()
Run Code Online (Sandbox Code Playgroud)
父程序在以下子程序child_process.py中调用"run"函数:
import multiprocessing
def run():
pool = multiprocessing.Pool(processes=4)
print 'TEST!'
pool.close()
pool.join()
Run Code Online (Sandbox Code Playgroud)
当我运行父程序时,没有打印出任何内容,程序很快退出.但是,如果print 'TEST!'在上面移动了一行(在创建嵌套子进程之前),'TEST!'则打印4次.
由于子进程中的错误不会打印到屏幕,这似乎表明当子进程创建自己的嵌套子进程时程序崩溃.
谁能解释一下场景背后会发生什么?谢谢!
正如 noxdafox 所说,multiprocessing.Pool使用守护进程。我找到了一个简单的解决方法,使用multiprocess.Process:
家长计划:
import multiprocessing
import child_process
processes = [None] * 4
for i in range(4):
processes[i] = multiprocessing.Process(target=child_process.run, args=(i,))
processes[i].start()
for i in range(4):
processes[i].join()
Run Code Online (Sandbox Code Playgroud)
子程序(名称为child_process.py):
import multiprocessing
def test(info):
print 'TEST', info[0], info[1]
def run(proc_id):
pool = multiprocessing.Pool(processes=4)
pool.map(test, [(proc_id, i) for i in range(4)])
pool.close()
pool.join()
Run Code Online (Sandbox Code Playgroud)
输出为 16 行TEST:
TEST 0 0
TEST 0 1
TEST 0 3
TEST 0 2
TEST 2 0
TEST 2 1
TEST 2 2
TEST 2 3
TEST 3 0
TEST 3 1
TEST 3 3
TEST 3 2
TEST 1 0
TEST 1 1
TEST 1 2
TEST 1 3
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3806 次 |
| 最近记录: |