python 进程/线程间的通讯

线程间的通讯
  1. Condition(threading模块下):进行复杂进程同步
    锁的释放可以使用with语句执行。
A = Condition()//申请锁
A.acquire()
A.wait()//等待notify()触发
A.notify()//触发notify()
A.release()//释放锁
  1. Semaphore(信号量):同时只允许并发固定个数的锁,超过数目,必须等待其他线程锁释放出空余的锁,可用于线程并发管理。
A = Semaphore(20)//锁的数量为
B = A.acquire()
B.release()
  1. concurrent.futures下的 ThreadPoolExecutor(线程池),as_completed(获取执行完毕的线程,本身为一个迭代器)
from concurrent .futures import ThreadPoolExecutor,as_completed,waite,FIRST_COMPLETED
A = ThreadPoolExecutor(max_workers=20)//最大线程并发数量为20
future = A.submit(function_name,(kwargs))//添加线程,function_name函数名称,kwargs参数
future.result()//获取线程返回值
future.done()//判断线程是否结束
future.cancel()//取消线程,只有线程还没执行的时候才可以取消
task = [A.submit(function_name,(kwargs)) for i in range(20)]//迭代生成线程列表
wait(task,return_when=FIRST_COMPLETED)//等待线程执行完成,return_when跳出条件 = 枚举类型(包含在concurrent .futures下)
for i in as_completed(task)://迭代已经结束的线程
    print("result:",i.result())
for i in A.map(function_name,kwargs_list)://批量生成线程,并添加进入线程池,并迭代线程(按添加顺序),kwargs_list可迭代的参数列表
    print(i.result())
进程间的通讯
  1. 进程间不能使用共享变量来分享数据
  2. 在进程间不能使用常规queue来进来传值,必须使用multiprocessor 下Queue或Manager下的Queue(在pool进程池中只能使用Manager中的Queue)
  3. 关于Manager:这个包下有拥有许多python常规的数据类型的多进程封装:dict,list 等等
  4. Pipe(管道):类似于Queue的缩减版(只能用于两个进程间的通讯),但是其拥有更好的性能。
A,B = Pipe()
A.send("发送的变量")
B.recv("接受到的变量")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值