网创优客建站品牌官网
为成都网站建设公司企业提供高品质网站建设
热线:028-86922220
成都专业网站建设公司

定制建站费用3500元

符合中小企业对网站设计、功能常规化式的企业展示型网站建设

成都品牌网站建设

品牌网站建设费用6000元

本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...

成都商城网站建设

商城网站建设费用8000元

商城网站建设因基本功能的需求不同费用上面也有很大的差别...

成都微信网站建设

手机微信网站建站3000元

手机微信网站开发、微信官网、微信商城网站...

建站知识

当前位置:首页 > 建站知识

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("主线程完成")

文章名称:Python线程Event例子
URL网址:http://bjjierui.cn/article/jgcdcp.html

其他资讯