Python线程Event例子
import threadingimport loggingimport timelogging.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 threadingimport datetimeimport logginglogging.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("主线程完成")
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。