# -*-coding:UTF-8-*-
# FileName: 创建进程.py
from multiprocessing import Process
def func(n):
print("这里是子进程func...", n)
print("开始执行父进程...\n\n")
p = Process(target=func, args=(1,))
p.start()
print("父进程结束")
执行结果:
D:\Python37\python.exe D:/Python37/Code/mp_创建进程.py
开始执行父进程...
父进程结束
开始执行父进程...
Traceback (most recent call last):
...
...
...
File "D:\Python37\lib\multiprocessing\spawn.py", line 143, in get_preparation_data
_check_not_importing_main()
File "D:\Python37\lib\multiprocessing\spawn.py", line 136, in _check_not_importing_main
is not going to be frozen to produce an executable.''')
RuntimeError:
An attempt has been made to start a new process before the current process has finished its bootstrapping phase.
This probably means that you are not using fork to start your child processes and you have forgotten to use the proper idiom in the main module:
if __name__ == '__main__':
freeze_support()
...
The "freeze_support()" line can be omitted if the program is not going to be frozen to produce an executable.
运行时错误:
在当前进程完成其引导阶段之前,已尝试启动新进程。
这可能意味着您没有使用fork来启动子进程,并且忘记了在主模块中使用适当的惯用法:
if __name__ == '__main__':
freeze_support()
...
如果不打算冻结程序以生成可执行文件,则可以省略“freeze_support()”行。
ywjco_567
例子:
执行结果:
出错的关键原因,在出错前的一段代码运行结果上已显示:
即:
1 import Process-------------------------------------------执行了一次;
2 p = Process(target=func, args=(1,))----------------再次被执行,进入死循环...;
python 有一个函数“_check_not_importing_main()”就是要检查这种状况。
修改的代码:
运行结果正常,只执行一次: