• 技术文章 >Python技术 >Python基础教程

    Python如何实现条件变量同步

    爱喝马黛茶的安东尼爱喝马黛茶的安东尼2019-07-06 09:07:03原创1903

    条件变量同步

    有一类线程需要满足条件之后才能够继续执行,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 条件变量同步
    品易云
    上一篇:Python中元祖的用法 下一篇:Python如何实现线程条件同步

    相关文章推荐

    • Python之requests模块相关介绍

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网