「python并发编程」 multiprocessing 模块实现多进程
1.1 multiprocessing 模块说明
multiprocessing 模块为在子进程中运行任务、通信和共享数据,以及执行各种形式的同步提供支持。进程没有任何共享状态。
1.2 multiprocessing 模块常用类
类 | 说明 |
Process([group [, target [, name [, args [, kwargs]]]]]) | 创建子进程任务。target 是子进程启动时执行的可调用对象,args和kwargs是target执行的参数,name是为进程指定描述性名称的字符串,group参数未使用,值始终为None |
1.3 Process实例常用方法
方法 | 说明 |
p.is_alive() | 如果p仍然运行,返回True |
p.join([timeout]) | 等待进程p终止,timeout是可选的超时期限。进程可以被连接无数次,但如果连接自身则会出错 |
p.run() | 进程启动时运行的方法。默认会调用target,也可继承Process类并重新实现run()函数 |
p.start() | 启动进程,会调用p.run()函数 |
p.terminate() | 强制终止进程,如果调用此函数,进程p将被立即终止,同时不会进行任何清理动作。如果进程p还创建了它自己的子进程,那这些子进程将会变为僵尸进程。使用此方法需要特别小心,如果p保存了一个锁或参与了进程间通信,那么终止它可能会导致死锁或I/O损坏 |
1.4 Process实例常用属性
属性 | 说明 |
p.authkey | 进程的身份验证键,主要用于为涉及网络连接的底层进程间通信提供安全性,只有在两端具有相同的身份验证键时才能连接成功 |
p.daemon | 显示进程是否是后台进程,当创建它的进程终止时,后台进程将自动终止,p.daemon的值必须在使用p.start()函数启动进程之前进行设置 |
p.exitcode | 进程的整数退出码,如果进程仍然在运行,它的值为None,如果值为-N表示进程由信号N所终止 |
p.name | 进程的名称 |
p.pid | 进程的整数进程PID |
1.5 multiprocessing示例
1.5.1 通过Process类实现多进程
import multiprocessing
import time
def clock(interval):
while True:
print(f'The time is {time.ctime()}')
time.sleep(interval)
if __name__ == '__main__':
p = multiprocessing.Process(target=clock, args=(5,))
p.start()
1.5.2 通过继承Process类,重写run方法实现多进程
import multiprocessing
import time
class ClockProcess(multiprocessing.Process):
def __init__(self, interval):
multiprocessing.Process.__init__(self)
self.interval = interval
def run(self):
while True:
print(f'The time is {time.ctime()}')
time.sleep(self.interval)
if __name__ == "__main__":
p = ClockProcess(5)
p.start()