python threading condition

 threading
 time

 Producer(threading.Thread):
     run(self):
         count
         True:
             con.acquire():
                 count > 1000:
                    con.wait()
                :
                    count = count+100
                    msg = self.name+ + str(count)
                     msg
                    con.notify()
                con.release()
                time.sleep(1)

 Consumer(threading.Thread):
     run(self):
         count
         True:
             con.acquire():
                 count < 100:
                    con.wait()
                :
                    count = count-3
                    msg = self.name++str(count)
                     msg
                    con.notify()
                con.release()
                time.sleep(1)

count = 500
con = threading.Condition()

 test():
     i  range(2):
        p = Producer()
        p.start()
     i  range(5):
        c = Consumer()
        c.start()
  == :
    test()

个人理解:

代码生成了2个线程为生产者,5个线程为消费者

首先说明生产者和消费者是互不干扰的

首先说生产者是怎么生产的

首先第一个线程执行后比如说count就是600,这样释放锁,下一个线程开始跑累计+=100,每次生产完成通知消费者,当生产者发现count为1000时wait也就是等待

再说消费者一直再消费,当生产者生产为600时,消费者消费完事597,当count也就是产品为1000时,由于生产者wait,消费者消费了3个也就是997,这时消费者消费了3个后notify也就是通知生产者

说说这么做的好处

假如我生产者因为某种因素不生产了,这时消费者是不知道的,这时就需要生产者每生产一次就告诉消费者,同理生产者也要知道消费者是否在消费

而且如果生产者的生产的速率大大的大与消费的速度,这时wait可以通过伐值的判断来限制队列最大的长度

时间: 2024-10-12 20:26:12

python threading condition的相关文章

Python 多线程之threading condition

使用Condition对象可以在某些事件触发或者达到特定的条件后才处理数据,Condition除了具有Lock对象的acquire方法和release方法外,还有wait方法.notify方法.notifyAll方法等用于条件处理. threading.Condition([lock]):创建一个condition,支持从外界引用一个Lock对象(适用于多个condtion共用一个Lock的情况),默认是创建一个新的Lock对象. acquire()/release():获得/释放 Lock w

python threading模块使用 以及python多线程操作的实践(使用Queue队列模块)

今天花了近乎一天的时间研究python关于多线程的问题,查看了大量源码 自己也实践了一个生产消费者模型,所以把一天的收获总结一下. 由于GIL(Global Interpreter Lock)锁的关系,纯的python代码处理一般逻辑的确无法活动性能上的极大提升,但是在处理需要等待外部资源返回或多用户的应用程序中,多线程仍然可以作为一个比较好的工具来进行使用. python提供了两个模块thread和threading 来支持python的多线程操作.通俗的讲一般现在我们只使用threading

python threading之条件变量同步

有一类线程需要满足条件之后才能够继续执行,Python提供了threading.Condition 对象用于条件变量线程的支持,它除了能提供RLock()或Lock()的方法外,还提供了 wait().notify().notifyAll()方法.wait([timeout]):线程挂起,直到收到一个notify通知或者超时(可选的,浮点数,单位是秒s)才会被唤醒继续运行.wait()必须在已获得Lock前提下才能调用,否则会触发RuntimeError.调用wait()会释放Lock,直至该线

[Python]threading local 线程局部变量小测试

概念 有个概念叫做线程局部变量,一般我们对多线程中的全局变量都会加锁处理,这种变量是共享变量,每个线程都可以读写变量,为了保持同步我们会做枷锁处理.但是有些变量初始化以后,我们只想让他们在每个线程中一直存在,相当于一个线程内的共享变量,线程之间又是隔离的.python threading模块中就提供了这么一个类,叫做local. 多线程中共享变量和局部变量的区别我画两个小图,简单描述下(作图能力一般,请见谅,概念性的东西大家可以google下,很多好文章) 全局变量 线程局部变量 对比: 下面是

Python学习笔记- Python threading模块

Python threading模块 直接调用 # !/usr/bin/env python # -*- coding:utf-8 -*- import threading import time def sayhi(num): print("running on number:%s" % num) time.sleep(3) if __name__ =='__main__': #生成两个线程实例 t1 = threading.Thread(target=sayhi,args=(1,)

Python 多线程 Condition 的使用

Condition Condition(条件变量)通常与一个锁关联.需要在多个Contidion中共享一个锁时,可以传递一个Lock/RLock实例给构造方法,否则它将自己生成一个RLock实例. 可以认为,除了Lock带有的锁定池外,Condition还包含一个等待池,池中的线程处于状态图中的等待阻塞状态,直到另一个线程调用notify()/notifyAll()通知:得到通知后线程进入锁定池等待锁定. 构造方法: Condition([lock/rlock]) 实例方法: acquire([

python threading

python threading 模块使用多线程.感谢小马哥指点迷津. #!/usr/bin/env python # -*- coding: UTF-8 -*- import threading threads = [] # 先创建线程对象  for li in db_con:     t = threading.Thread(target=update_thread,args=(list,file,db_con,li))     threads.append(t) # 启动所有线程 for 

python threading queue

import queue,threading l=threading.Lock() class MyThread(threading.Thread): def __init__(self): threading.Thread.__init__(self) global que self.queue = que def run(self): while True: if self.queue.empty(): break item = self.queue.get() if l.acquire(1

python threading超线程使用简单范例的代码

在工作过程中中,将内容过程中经常用的内容片段珍藏起来,下面内容段是关于python threading超线程使用简单范例的内容,希望能对小伙伴们有较大帮助. # encoding: UTF-8 import threading # 方法1:将要执行的方法作为参数传给Thread的构造方法 def func(): print 'func() passed to Thread' t = threading.Thread(target=func) t.start() # 方法2:从Thread继承,并