发布时间:2019-07-23 09:46:11编辑:auto阅读(1421)
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()
思路:需要有 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最佳学习路线
下一篇: Python线程之threading
47487
45791
36787
34320
28957
25592
24438
19608
19106
17630
5460°
6043°
5567°
5634°
6569°
5372°
5372°
5880°
5853°
7165°