python event_Python线程Event例子

需求1:Boss需要一个员工生产100个杯子,Boss一直等待员工生产完成之后方可

import threading

import logging

import time

logging.basicConfig(level=logging.INFO)

def worker(event:threading.Event, count=10):

logging.info("I'm working for U.")

cups = []

while True:

logging.info('make 1')

time.sleep(0.5)

cups.append(1)

if len(cups) >= count:

event.set()

break

logging.info('I finished my job. cups={}'.format(cups))

def boss(event:threading.Event):

logging.info("I'm boss, waiting for U.")

event.wait()

logging.info("Good Job")

Event = threading.Event()

w = threading.Thread(target=worker, args=(Event, 100))

b = threading.Thread(target=boss, args=(Event, ))

w.start()

b.start()

需求2:使用threading Event实现类似Timer延迟执行的线程

思路:需要有 start和 cancel的功能(使用 Event wait(),set(), 方法)

代码实现:

import threading

import datetime

import logging

logging.basicConfig(level=logging.INFO)

def add(x:int, y:int):

logging.info(x + y)

class Timer(object):

def __init__(self, interval, fn, *args, **kwargs):

self.interval = interval

self.fn = fn

self.args = args

self.kwargs = kwargs

self.event = threading.Event()

def start(self):

threading.Thread(target=self.__run).start()

def cancel(self):

self.event.set()

def __run(self):

start = datetime.datetime.now()

logging.info('Waiting')

self.event.wait(self.interval)

if not self.event.is_set():

# 上面两行可以直接改写成 if not self.event.wait(self.interval):

self.fn(*self.args, **self.kwargs)

delta = (datetime.datetime.now() - start).total_seconds()

logging.info('finished {}'.format(delta))

self.event.set()

t = Timer(10, add, 4, 50)

t.start()

e = threading.Event()

e.wait(4)

t.cancel()

print("主线程完成")

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值