创建进程
方式一:直接继承Process类
from multiprocessing import Process
p = Process(target=fun, name='...',args=(param,), kwargs={...}, daemon=bool)
p.start()
p.join()
print('p子进程执行完才到我了')
daemon 表示守护进程,当为子进程上设置为True时,主进程结束(这里的结束指代码级的结束,如果为False,会一直等到子进程结束,父进程才结束),会发送SIGTERM(即相当于kill -15);默认为False。另外,daemon进程不能有子进程!
join:意义是阻塞当前进程,直到子进程结束
方式二:写一个自定义类,还是继承Process
from multiprocessing import Process
def fun():
pass
class MyProcess(Process):
def run(self):
fun()
这里重写run方法可以实现一些自定义的灵活操作,当子进程启动时,会自动调用run,如果同时定义了target,会忽略target方法
方式三:进程池
from multiprocessing import Pool
def fun():
pass
pool = Pool(processes=int, initializer=fun,
initargs=(param,), maxtasksperchild=int)
processes=指定创建进程数, initializer=初始化进程需要调用的函数, initargs=初始化函数的参数, maxtasksperchild=每个进程允许处理的最大任务数,达到就kill掉,再起一个新的子进程
map:map(fun, iterable)