定时器:
循环sleeo,在循环里放入要执行的任务,然后sleep一段时间再执行
sleep是阻塞函数,theading模块中的timer是个非阻塞函数
class threading.Timer(interval, function, args=[], kwargs={})
队列:元素先进先出,进put(arg),取get(),队列也是阻塞形态
queue.Queue()先入先出
queue.LifoQueue()后入先出
queue.PriorityQueue()可设置优先级
可传参数maxsize设置可存储数据的数量
Queue.put()往队列放数据,block=False,timeout=15任一个都可以不等待,满了就报错
Queue.get()从队列取数据,block=False,timeout=15任一个都可以不等待,空了就报错
Queue.task_done()配合get使用,告诉队列本次get完成
Queue.qsize()获取数据的数量
Queue.full()判断队列是否满
Queue.empty()判断队列是否空
75-Python多线程-线程池_哔哩哔哩_bilibili
Queue.join()等待线程完成
线程池:
线程池可以提高性能,防止启动大量线程而导致系统变慢,可以更简单的创建线程,适用于突发的需要大量线程,而线程存在时间短的场景
线程池由concurrent.futures下的threadPoolExecutor提供
submit(fn,*args,**kwargs)将函数fn提交给线程池,后面是参数
map(fn,*iterables,timeout=None,chunksize=1)启动多线程,让函数fh分别使用后面的可迭代参数
shutdown(wait=true)关闭线程池
使用submit()函数提交后会返回一个future对象
cancel()可以取消该线程,如果线程正在进行,不可取消,返回false,否则取消线程,并返回true
cancelled()返回线程是否被取消
running()返回线程是否正在运行
done()返回线程是否完成,包括取消和正常完成
result(timeout=none)获取该线程的返回结果,会阻塞线程,timeout是阻塞时间
add_done_callback(fn)线程结束后执行fn函数
from datetime import datetime
import time
# 每n秒执行一次,循环sleep函数
def timer(n):
while True:
print(datetime.now().strftime("%Y-%m-%d %H:%M:%S"))#输出当时时间
time.sleep(n)#sleep一段时间再执行
timer(1)#定义一秒循环