目录
创建进程基础 multiprocessing模块multiprocessing.Process模块Process模块介绍 主要方法介绍主要属性介绍创建进程注意事项使用process模块创建进程通过继承Process类开启进程进程之间的数据隔离问题守护进程模拟网络购票 仔细说来,multiprocess不是一个模块而是python中一个操作、管理进程的包。 之所以叫multi是取自multiple的多功能的意思,在这个包中几乎包含了和进程有关的所有子模块。由于提供的子模块非常多,为了方便大家归类记忆,我将这部分大致分为四个部分:创建进程部分,进程同步部分,进程池部分,进程之间数据共享。
process模块是一个创建进程的模块,借助这个模块就能完成进程的创建。
Process([group [, target [, name [, args [, kwargs]]]]])
由该类类实例化得到的对象,表示一个子进程中的任务
强调:
需要使用关键字的方式来指定参数args指定的为传给targe函数的位置参数,是一个元组形式,而且必须有逗号参数介绍:
group参数未使用,值始终为Nonetarget表示调用对象,即子进程要执行的任务args表示调用对象的位置参数元组,args=(1,2,'egon',)kwargs表示调用对象的字典,kwargs={'name':'egon','age':18}name为子进程的名称 在Windows操作系统中由于没有fork(linux操作系统中创建进程的机制),在创建子进程的时候会自动 import 启动它的这个文件,而在 import 的时候又执行了整个文件。因此如果将process()直接写在文件中就会无限递归创建子进程报错。所以必须把创建子进程的部分使用if __name__ =='__main__' 判断保护起来,import 的时候,就不会递归运行了。
在一个python进程中开启子进程
from multiprocessing import Process def foo(name): print('hello',name) if __name == '__main__': p = Process(target = foo,args = ('wzh',)) p2 = Process(target = foo,args = ('wang',)) p.start() # p线程开启 p2.start() print('父进程……') # 先执行父进程的代码再执行子进程 ''' 父进程…… hello wzh hello wang '''方法使用:
from multiprocessing import Process,current_process import time import os def foo(i): print(f'进程{i}开始。。。') time.sleep(1) print('子:',os.getpid()) print(current_process().pid) print('父:', os.getppid()) print(f'进程{i}结束。。。') if __name__ == '__main__': for i in range(3): p = Process(target=foo,args= (i,)) p.start() p.join() # 等待子进程执行完成之后再执行父进程 print(p.name) print(p.is_alive()) print(p.terminate()) print('子:',p.pid) print('父:',os.getpid()) print('主进程开始。') ''' 进程0开始。。。 子: 1408 1408 父: 12168 进程0结束。。。 Process-1 False None 子: 1408 父: 12168 主进程开始。 '''多个进程同时运行中join()的使用
import time from multiprocessing import Process def f(name): print('hello', name) time.sleep(1) if __name__ == '__main__': for i in range(3): p = Process(target=f, args=('wzh',)) p.start() p.join() print('父进程在执行') ''' hello wzh hello wzh hello wzh 父进程在执行 '''守护进程会随着主进程的结束而结束。
主进程创建守护进程
其一:守护进程会在主进程代码执行结束后就终止
其二:守护进程内无法再开启子进程,否则抛出异常:
import os import time from multiprocessing import Process class Foo(Process): def __init__(self, name): super().__init__() self.name = name def run(self): print(os.getpid(), self.name) time.sleep(1.9) print('当你打印了这句话时,说明我还没有死!') if __name__ == '__main__': p = Foo('wzh') p.daemon = True # 将p这个子进程变为守护进程,当主进程执行结束时,p也会结束 p.start() time.sleep(2) print('主进程') ''' 5928 wzh 当你打印了这句话时,说明我还没有死! 主进程 '''转载于:https://www.cnblogs.com/dadazunzhe/p/11529167.html
相关资源:JAVA上百实例源码以及开源项目