最后更新于
最后更新于
只有符合下面条件的函数才能被多进程使用:
任务必须定义成普通函数来提交, 实例方法, 闭包, 其他类型的可调用对消都是不支持并行处理的
函数的参数和返回值必须可兼容与pickle编码, 因为进程之间的通信, 需要在解释器之间交换数据时, 进行序列化处理
Python中基础的多进程包为multiprocessing.
Process是创建进程的类, 创建对象的方法如下:
group: 无用
target: 调用函数
name: 进程名称
args: 参数
kwargs: 参数
start(): 启动线程
join([timeout]): 阻塞
is_alive(): 进程是否在运行
pid: 进程号
name: 进程名称
daemon: 定义是否是守护进程, 定义方法与线程Thread
相同
输出为:
类似于多线程定义类继承threading.Thread
, 并将需要多进程的方法写在run()
方法中. 同样, 这种方法不推荐, 扩展性差.
Lock, RLock与线程包中的使用方法相同.
Event, Condition, Semaphore与线程包中的使用方法相同.
Queue与queue
包中队列Queue
使用方法相同, 只是这里是针对于多进程的安全的队列.
创建方法为multiprocessing.Pipe(duplex=True)
, duplex
表示管道是否是全双工模式. 创建会返回(conn1, conn2)
形式的端口, conn1
端口负责发送信息, 使用conn1.send()
方法, conn2
端口负责接收消息, 使用conn2.recv()
方法.
当recv()
方法没有消息可以接收时, 就会产生阻塞.
管道的作用为作为两个进程之间的通信, 一端发送, 另一端接受. 当然也每一端也可以即接受又发送. 原理可见.