递归锁

递归锁  了解 

特点:

可以被连续的acquire和release

但是只能被第一个抢到这把锁执行上述操作

他的内部有一个计数器 没acquire一次技术加一 每realse一次技术减一

只要技术不为0 那么其他人都无法抢到该锁

 

将:mutexA=Lock()

mutexB=Lock()

换成

mutexA=mutexB=RLock()

信号两(了解)

信号量在不同的阶段可能对应不同的技术点

在并发编程中信号量指的是锁

from threading import Thread,Semaphore

import time

import random  #是类 导入随机模块  例如大勇随机验证码等

sm=Semaphore(5)我做了个公共厕所  里面有个坑位(起码是一个或者一个以上)

def  task(name):

  sm.acquire()  抢锁

  print('%s正在蹲坑'%name)

  time.sleep(random.randint(1,5))   随机的

  sm.release()

if __name__=='__main__':

  for i in range(20):

    t=Thread(target=talk,args=('伞兵%s号'%i,))

    t.start()

 

队列:

Queue

后进先出Q:LifoQueue  例如:q=queue.LifoQueue

优先级Q:你可以给放入队列中的数据设置进出的优先级

q=queue.PriorityQueue(4)

q.put((10,'111'))

q.put((100,'222'))

q.put((0,'333'))

q.put((-5,'444'))

结论:put括号内方一个元组 第一个放数字位置标识优先级,第二个方数字对应的值

数字越小优先级越高 先出

 

需要掌握:进程池与线程池

 

def communication():定义一个通信

进程池与线程池总结 需要记住的三行:from concurrent.futurs ThreadPoolExecutor,processPoolExecutor

pool=ProcessPoolExecutor(5)

res=pool.subimit(task,i).add_done_callback(call_back)

 

监管io操作:

from gevent import monkey

monkey.patch_all()  猴子补丁,这两行可以写到一行 中间加;即可

from gevent import  spawn了解

 

。。。。。。。。。

spawn(xx)里面是函数名  可以监管这里面的io操作

例如:g1=spawn(ha)

g1.join()#等待被检测的任务执行完毕再往后执行

 

posted @ 2023-09-26 15:07  朱饱饱  阅读(44)  评论(0)    收藏  举报