博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python note 32 锁
阅读量:5295 次
发布时间:2019-06-14

本文共 2980 字,大约阅读时间需要 9 分钟。

1、lock锁

import threadingimport timev = []lock = threading.Lock()def func(arg):    lock.acquire()    v.append(arg)    time.sleep(0.01)    m = v[-1]    print(arg,m)    lock.release()for i in range(10):    t =threading.Thread(target=func,args=(i,))    t.start()

2、rlock锁

import threadingimport timev = []lock = threading.RLock()def func(arg):    lock.acquire()    lock.acquire()    v.append(arg)    time.sleep(0.01)    m = v[-1]    print(arg,m)    lock.release()    lock.release()for i in range(10):    t =threading.Thread(target=func,args=(i,))    t.start()

3、semaphore锁

import timeimport threadinglock = threading.BoundedSemaphore(3)def func(arg):    lock.acquire()    print(arg)    time.sleep(1)    lock.release()for i in range(20):    t =threading.Thread(target=func,args=(i,))    t.start()

4、condition锁

import timeimport threadinglock = threading.Condition()# ############## 方式一 ##############def func(arg):    print('线程进来了')    lock.acquire()    lock.wait() # 加锁    print(arg)    time.sleep(1)    lock.release()for i in range(10):    t =threading.Thread(target=func,args=(i,))    t.start()while True:    inp = int(input('>>>'))    lock.acquire()    lock.notify(inp)    lock.release()# ############## 方式二 ##############"""def xxxx():    print('来执行函数了')    input(">>>")    # ct = threading.current_thread() # 获取当前线程    # ct.getName()    return Truedef func(arg):    print('线程进来了')    lock.wait_for(xxxx)    print(arg)    time.sleep(1)for i in range(10):    t =threading.Thread(target=func,args=(i,))    t.start()"""

5、event锁

import timeimport threadinglock = threading.Event()def func(arg):    print('线程来了')    lock.wait() # 加锁:红灯    print(arg)for i in range(10):    t =threading.Thread(target=func,args=(i,))    t.start()input(">>>>")lock.set() # 绿灯lock.clear() # 再次变红灯for i in range(10):    t =threading.Thread(target=func,args=(i,))    t.start()input(">>>>")lock.set()

 6、threadinglocal

import timeimport threadingv = threading.local()def func(arg):    # 内部会为当前线程创建一个空间用于存储:phone=自己的值    v.phone = arg    time.sleep(2)    print(v.phone,arg) # 去当前线程自己空间取值for i in range(10):    t =threading.Thread(target=func,args=(i,))    t.start()

7、线程池

from concurrent.futures import ThreadPoolExecutorimport timedef task(a1,a2):    time.sleep(2)    print(a1,a2)# 创建了一个线程池(最多5个线程)pool = ThreadPoolExecutor(5)for i in range(40):    # 去线程池中申请一个线程,让线程执行task函数。    pool.submit(task,i,8)

8、生产者消费者模型

import timeimport queueimport threadingq = queue.Queue() # 线程安全def producer(id):    """    生产者    :return:    """    while True:        time.sleep(2)        q.put('包子')        print('厨师%s 生产了一个包子' %id )for i in range(1,4):    t = threading.Thread(target=producer,args=(i,))    t.start()def consumer(id):    """    消费者    :return:    """    while True:        time.sleep(1)        v1 = q.get()        print('顾客 %s 吃了一个包子' % id)for i in range(1,3):    t = threading.Thread(target=consumer,args=(i,))    t.start()

 9、获取当前线程

threading.current_process()

 

转载于:https://www.cnblogs.com/P-Z-W/p/11204148.html

你可能感兴趣的文章
Linux操作系统实时性分析
查看>>
CPU供电维修
查看>>
Java内存模型的基础
查看>>
挂起(suspend)与线程阻塞工具类LockSupport
查看>>
lucene定义自己的分词器将其分成单个字符
查看>>
结构体 变迁
查看>>
[整理III]微软等数据结构+算法面试100题[最新第61-80题]
查看>>
FreeMarker template error
查看>>
字符串格式化及字符串的一些方法---''
查看>>
Calendar类
查看>>
ubuntu15.10 源码安装 tensorflow
查看>>
Javascript 通过cookie记录浏览记录
查看>>
我怎么能确保non-corrupt 文件传输 in linux
查看>>
DIV+CSS的30条进阶技能
查看>>
把word文档中的所有图片导出
查看>>
Spring 自动装配;方法注入
查看>>
浏览器的判断;
查看>>
ubuntu 18.04取消自动锁屏以及设置键盘快捷锁屏
查看>>
Oracle 初始化参数 二三事,随记
查看>>
三维凸包模板
查看>>