今天在测试多进程时, 发现了一个问题
测试代码:
#coding: utf8
from multiprocessing import Process
import os
print('Global_print..., 因为两次os.getpid()得到了一样的结果, 而子进程的那句输出也从侧面验证了另外两句print是父进程执行的....简单的意思应该是下面这样:
因为Windows缺乏linix那种fork, 所以它会有一些额外的限制:
不管是绑定还是未绑定的方法, 都不要直接作为参数传给Process初始化的target, 相反应该要用普通的函数代替...子进程在访问全局变量时, 可能会与父进程的值不同. ( 模块级别的常量没这问题 )
开启新Python解析器或者创建新process时, 确定主模块能够安全的导入....而刚才的那个问题, 就是因为没有注意到第三点, 所以导致了意想不到的的副作用, 应该用下面的写法取代上面的不安全写法:
from multiprocessing import Process, freeze_support