Python进程

本文主要介绍python进程相关知识。

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
    19
    import 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
24
from 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("主进程")

---------------- The End ----------------