python中级第十六课--多线程之condition(条件变量)(小白piao分享)

线程间的通信机制:

     条件变量:线程根据条件值的情况来实现同步。

场景:如果要实现一遍一遍地重复通知某个事件,最好选择Condition对象来处理,例如周期性定时器:

import threading
import time

class Timer:
    def __init__(self,interval):
        self._interval = interval
        self._flag = 0
        self._cv = threading.Condition()# 创建Condition对象
    def start(self):
        t = threading.Thread(target=self.run,args=())
        t.daemon = True
        t.start()
    def run(self):
        while True:
            time.sleep(self._interval)# 始终的打点频率(1/self._interval (次/秒))
            with self._cv:
                self._flag ^= 1#让标志位 1 0 1 0 地进行交替(按位异或)
                self._cv.notify_all()
    def wait_for_tick(self):
        with self._cv:
            last_flag = self._flag
            while last_flag == self._flag:
                self._cv.wait()

ptimer = Timer(5)# 每5秒打点一次
ptimer.start()

def countdown(n):
    while n > 0:
        n-=1
        print('countDown:',n)

def countup(a):
    num = 0
    while  num < a:
        num += 1
        print('countUp:',num)

threading.Thread(target=countdown,args=(10,)).start()
threading.Thread(target=countup,args=(5,)).start()

     对于初学者来说这部分知识无疑难上加难,多线程高并发本身就是目前程序界的头等难题,在复杂的大型高并发系统中,线程运行顺序及状态等变得尤为重要且尤其的困难,原因很简单,这部分是由系统来控制的,并不是程序员几行代码就可以搞定的,及时可以按照顺序执行,在大型项目中,也不是一般程序员可以企及的。以上代码只是保证了同步的实现,但是,同步不代表顺序一定。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白piao

创作不易,支持一下!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值