mutilprocess模块的用法

mac2022-06-30  79

mutilprocess用法

导入Process类

使用Process类生成对象

调用对象的方法

start()

开启子进程

join()

等待这个子进程结束再执行下面的代码

pid与ppid

查看pid

导入current_process current_process().pid查看子进程的pid属性 p.pid导入os os.get_pid()

查看ppid

导入os os.get_ppid()

os的方法在任意进程都可以查看当前进程和父进程pid

守护进程

process(daemon= true)

当父进程的最后一行代码结束时,守护进程不管执行到什么地方都会结束

PS:是父进程的代码最后一行,而不是父进程的程序运行完的时候

terminate()

向操作系统发送中断程序的指令

is_alived

返回值是bool类型

判断进程是否还在运行

name

查看进程的名字

一般是Process-1[-2,]之类的,无意义

JoinableQueue

与Queue的不同之处就在多了一个join方法

认识join方法

每拿出一个数据时调用一次task_done()方法如果当前队列中还有数据时join就会阻塞在这里,直到队列里的数据被清空,程序才会继续执行

生产者消费者模型

from multiprocessing import Queue,Process def producer(q,food,name): for i in range(10): res = f"{name}生产{food},编号:{i}" q.put(res) print(res) q.put('') def consumer(q,name): while True: res = q.get() if not res :break print(f"{name}吃了{res}") if __name__ == '__main__': q = Queue(5) p1 = Process(target=producer,args=(q,'cake','mark')) p2 = Process(target=producer,args=(q,'mike','nick')) c1 = Process(target=consumer,args=(q,'jiangheng')) c2 = Process(target=consumer,args=(q,'yanzhibing')) c3 = Process(target=consumer,args=(q,'yanzhibing')) p1.start() p2.start() c1.start() c2.start() q.put(None) c3.start()

生产者

生产数据

缓冲区

生产者将数据放入缓冲区, 消费者将数据从缓冲区取出

消费者

处理数据

优点

解耦支持并发支持忙闲不均生产者消费者模型,大大提高了生产者的生产效率,也大大提高了消费者的消费效率.

队列

管道+锁

管道:底层基于内存共享锁:进程锁

q=Queue(n)

生成队列对象,设置队列大小

q.put()

将任意数据类型放入

q.get()

将队列中的第一个数据取出

put/get的默认参数

block 默认为true 当队列满了,再put就会进入等待状态当队列空了,再get就会进入等待状态当为False时 当队列满了,再put就会抛错当队列空了,再get就会抛错timeout 只有当block为True时,才有意义设置等待状态所持续的时间, 超出时间一样会报错

进程锁

from multiprocessing import Lock

导入Lock

lock = Lock()

定义锁对象

lock.acquire()

为你的某一部分代码上锁注意的是,当这把锁上锁时,其他进程无法运行这部分的代码

lock.release()

解锁只有解锁后,其他进程才可以抢到这把锁来继续运行自己的代码

注意:在多进程是要确保多个进程使用的是同一把锁

XMind: ZEN - Trial Version

转载于:https://www.cnblogs.com/marklijian/p/11575103.html

最新回复(0)