美文网首页
37.5-Event总结

37.5-Event总结

作者: BeautifulSoulpy | 来源:发表于2020-01-27 10:30 被阅读0次

告诉自己,人终要有一场触及灵魂的旅行,看尽繁华如落,春红如醉,走孤独的路,遇正确的人,惊鸿一面只是惊艳了时光,深情不减才能温柔岁月。在路过万千风景之后,方能品味,江山如画!


总结:

  1. event.wait方法使这个线程只能干这事了;等着任务完成;
  2. 一定要知道你当前的代码是在 哪个线程中执行的;

from threading import Event, Thread
import logging
import time

FORMAT = '%(asctime)s %(threadName)s %(thread)d %(message)s'
logging.basicConfig(format=FORMAT, level=logging.INFO)


def boss(event: Event):
    logging.info("I'm boss, waiting for U.")
    # 等待
    event.wait()   # 阻塞,等到返回True;
    logging.info("Good Job.")

def worker(event: 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()   # 变为 True;
            break
        logging.info('I finished my job. cups={}'.format(cups))

event = Event()
w = Thread(target=worker, args=(event,))
b = Thread(target=boss, args=(event,))
w.start()
b.start()
#---------------------------------------------------

1. Event练习

实现Timer,延时执行的线程,延时计算add(x,y);

思路
Timer的构造函数中参数得有哪些?
如何实现start启动一个线程执行函数
如何cancel取消待执行任务

思路实现

from threading import Event, Thread
import logging

logging.basicConfig(level=logging.INFO)

def add(x: int, y: int):
    logging.info(x + y)

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

    def start(self):
        pass

    def cancel(self):
        pass

完整实现

from threading import Event, Thread
import datetime
import logging

logging.basicConfig(level=logging.INFO)


def add(x: int, y: int):
    logging.info(x+y)


class Timer:
    def __init__(self,interval,fn,*args,**kwargs):
        self.interval = interval
        self.fn = fn
        self.args = args
        self.kwargs = kwargs
        self.event = Event()

    def start(self):
        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():
            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 = Event()
e.wait(4)
# t.cancel()
print('==========')
#--------------------------------------------------------------------------------------------
INFO:root:waiting
==========
INFO:root:54
INFO:root:finished 10.000271

相关文章

  • 37.5-Event总结

    告诉自己,人终要有一场触及灵魂的旅行,看尽繁华如落,春红如醉,走孤独的路,遇正确的人,惊鸿一面只是惊艳了时光,深情...

  • 专题总结(待续。。。)

    质粒总结 引物总结 抗体总结 细胞系总结 模式动物总结 机制功能总结

  • 工作总结――让你欢喜让你忧

    哇哈哈,工作总结...... 工作中,我们常会被要求写各种总结,活动总结、销售总结、培训总结、月总结、季度总结.....

  • 工作总结万能公式

    总结汇报是职场上经常遇到的事,有周总结、月总结、季度总结、年中总结、年终总结、重点项目总结、重要环节总结等...

  • 缺不了的总结

    从小到大,缺不了的总结。知识点总结,读书电影的观后感,章节总结,学科总结,学期总结,新年总结,工作周总结月总结年中...

  • Java 知识点总结

    Java技术总结 总结内容如下: 1.语法总结, 2 面向对象总结, 3 线程总结, 4 输入输出流总结, 5 集...

  • 写在三十六岁(5)

    总结 又是一年十二月,各种总结开始写起,工作总结、家庭总结、财务总结…… 总结有它一定的存在的...

  • 阿里腾讯头条美团等iOS面试总结

    阿里iOS面试总结 头条iOS面试总结 腾讯iOS面试总结 百度iOS面试总结 美团iOS面试总结

  • (原创)15条适用于领导讲话、工作总结的二级标题,满满干货,收藏

    (作者:茶水泡面) 领导讲话稿、单位工作总结(年度总结、季度总结、单项总结、专题总结,甚至月总结哪一样都是要写的)...

  • D011+7组心洁~Fiona+《人生效率手册》读书笔记

    总结反思工具:总结笔记,这是将时间管理能力总结与提升的重要工具,包括每日总结、每周总结以及每月总结。我们在实践后,...

网友评论

      本文标题:37.5-Event总结

      本文链接:https://www.haomeiwen.com/subject/lbgnactx.html