最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • Python如何实现条件变量同步

    正文概述    2020-03-24   181

    Python如何实现条件变量同步

    条件变量同步

    有一类线程需要满足条件之后才能够继续执行,Python提供了threading.Condition 对象用于条件变量线程的支持,它除了能提供RLock()或Lock()的方法外,还提供了 wait()、notify()、notifyAll()方法。

    lock_con=threading.Condition([Lock/Rlock]): 锁是可选选项,不传人锁,对象自动创建一个RLock()。

    wait():条件不满足时调用,线程会释放锁并进入等待阻塞;

    notify():条件创造后调用,通知等待池激活一个线程;

    notifyAll():条件创造后调用,通知等待池激活所有线程。

    相关推荐:《Python视频教程》

    import threading, time
    from random import randint
    class Producer(threading.Thread):
        def run(self):
            global L
            while True:
                val = randint(0, 100)
                print('生产者', self.name, ':Append'+str(val),L)
                if lock_con.acquire():
                    L.append(val)
                    lock_con.notify()
                    lock_con.release()
                time.sleep(3)
    class Consumer(threading.Thread):
        def run(self):
            global L
            while True:
                lock_con.acquire()
                if len(L) == 0:
                    lock_con.wait()
                print('消费者', self.name, ":Delete" + str(L[0]), L)
                del L[0]
                lock_con.release()
                time.sleep(0.25)
    if __name__ == "__main__":
        L = []
        lock_con = threading.Condition()
        threads = []
        for i in range(5):
            threads.append(Producer())
        threads.append(Consumer())
        for t in threads:
            t.start()
        for t in threads:
            t.join()
        print('---- end ----')

    运行结果:

    生产者 Thread-1 :Append63 []
    生产者 Thread-2 :Append66 [63]
    生产者 Thread-3 :Append20 [63, 66]
    生产者 Thread-4 :Append83 [63, 66, 20]
    生产者 Thread-5 :Append2 [63, 66, 20, 83]
    生产者 Thread-4 :Append26 []
    消费者 Thread-6 :Delete26 [26]
    生产者 Thread-2 :Append21 []
    生产者 Thread-3 :Append71 [21]
    生产者 Thread-1 :Append19 [21, 71]
    生产者 Thread-5 :Append100 [21, 71, 19]
    生产者 Thread-1 :Append96 []
    消费者 Thread-6 :Delete96 [96]
    ........

    起源地下载网 » Python如何实现条件变量同步

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元