1.python并发编程
multiprocessing模块介绍
multiprocessing模块的功能众多:支持子进程、通信和共享数据、执行不同形式的同步,提供了Process、Queue、Pipe、Lock等组件。Process类的介绍
1
Process(group=None, target=None, name=None, args=(), kwargs={})
参数介绍:
group 参数未使用,留作未来扩展用,值始终为None
target 参数指定子进程要执行的任务,是一个可调用对象,一般为函数。
args 表示调用对象的位置参数元组,如args=(1,2,”egon”,)
kwargs 表示调用对象的字典,kwargs={“name”:”egon”,”age”:18}
name 为子进程的名称
方法介绍:
p.daemon:默认值为False,如果设为True,代表p为后台运行的守护进程,当p的父进程终止时,p也随之终止,并且设定为True后,p不能创建自己的新进程;必须在p.start()之前设置。
p.name:进程的名称
p.pid:进程的pid
p.exitcode:进程在运行时为None,如果为-N,表示被信号N结束。(了解即可)
p.authkey:进程的身份验证键,默认是由os.urandom()随机生成的32字符的字符串。
p.terminate() 关闭进程,不会立即关闭,因为cpu会有延迟。
p.is_alive() 判断进程是否存活,True或False
p.daemon=True 默认为False,设置p为守护进程,禁止创建子进程,并且父进程死了,p跟着一起死。注意:一定要在p.start()前设置。
p.join(x) 主进程等待p运行完毕,等待x秒就不再等了。
- Process类的使用
方法一:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19import time
import random
from multiprocessing import Process
def fun(name):
print('%s function beging' %name)
time.sleep(random.randrange(1,5))
print('%s function end' %name)
p1=Process(target=fun,args=('a1',))
p2=Process(target=fun,args=('a2',))
p3=Process(target=fun,args=('a3',))
p4=Process(target=fun,args=('a4',))
p1.start()
p2.start()
p3.start()
p4.start()
print("主进程")
方法二:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24from multiprocessing import Process
import time
import random
class sing(Process):
def __init__(self,name):
super(sing, self).__init__()
self.name = name
def run(self):
print("%s is singing." % self.name)
time.sleep(random.randrange(1,3))
print("%s is sing end." % self.name)
if __name__ == '__main__':
p1 = sing("egon")
p2 = sing("alex")
p3 = sing("lisi")
p1.start()
p2.start()
p3.start()
print("主进程")