IOT python高级培训(五)

1.定时器

threading.Timer(5,run) 5 是延迟时间 run是函数

实例

"""
定时器
"""
import threading
import time


def run():
    print("定时器启动")
    print(threading.current_thread())
    timer=threading.Timer(5,run)
if __name__ == '__main__':
    t1=threading.Timer(5,function=run)
    t1.start()
    while True:
        time.sleep(10)
        print('主线程')

2.队列

队列相关知识
queue.Queue()先入先出
queue.PriorityQueue(maxsize=3)
Queue.qsize() 返回队列的大小
Queue.empty() 如果队列为空,返回True,反之False
Queue.full() 如果队列满了,返回True,反之False,Queue.full 与 maxsize 大小对应
Queue.get([block[, timeout]])获取队列,timeout等待时间
Queue.get_nowait() 相当于Queue.get(False),非阻塞方法
Queue.put(item) 写入队列,timeout等待时间
Queue.task_done() 在完成一项工作之后,Queue.task_done()函数向任务已经完成的队列发送一个信号。每个get()调用得到一个任务,接下来task_done()调用告诉队列该任务已经处理完毕。
Queue.join() 实际上意味着等到队列为空,再执行别的操作

实例

import queue
#先入后去
import threading
import time

"""
q= queue.Queue(maxsize=3)#先入先出
q.put(1)#入一个队列
q.put(2)
print(q.full())#不满了为错误
q.put(3)
print(q.full())#满了为正确
print(q.get())#出一个队列
print(q.empty())#不空为错
print(q.get())
print(q.get())
print(q.empty())#空为对
# q.put(1,timeout=2)
print(q.qsize())#查看剩余队列

q=queue.PriorityQueue(maxsize=3)
q.put(1,'你好1')
q.put(10,'你好3')
q.put(2,'你好2')
"""
#先出后入
q=queue.Queue(maxsize=10)
def put_in():
    count=1
    while True:
        q.put(f'视频{count}')
        print(f'up主录制视频{count}')
        count+=1
        time.sleep(2)
def get_out(name):
    while True:
        print(f'{name}霸占了{q.get()}')
        time.sleep(2)
if __name__ == '__main__':
    p = threading.Thread(target=put_in)
    p.start()
    g=threading.Thread(target=get_out,args=('华腾',))
    g.start()
    g1 = threading.Thread(target=get_out, args=('华腾1',))
    g1.start()

3.线程池

线程池
功能:提高性能,防止线程多导致运行缓慢,适用突发线程多得

线程池由concurrent.futures下得ThreadPoolEexecutor提供
submit(fn,*args,&&kwargs)将函数fn提交给进程池,后面是参数
map(fn,*iterables,timeout=None,chunksize=1)启动多线程,让函数fn分别使用后面得可迭代参数
shutdown(wait=Ture)关闭线程

使用submit()函数提交后会韩慧==返回一个Future对象
cancel()取消线程,正在运行无法取消,返回Flase,取消成功Ture
cancelled()返回线程是否被取消
running()返回线程是否正在运行
done()返回线程是否完成
result(timeout=None)获取该线程得返回结果,会阻塞线程,timeout是阻塞事件
add_done_callback(fn)线程结束执行fn

实例

import threading
import time
from concurrent.futures import ThreadPoolExecutor


def run(x):
    print(f'线程{x}')
    time.sleep(2)
    return x*10
def callback(future):
    print(future.result())
if __name__ == '__main__':
    #with ThreadPoolExecutor(max_workers=2) as pool:   一样功能不用自己关闭
    pool=ThreadPoolExecutor(max_workers=2)#启动线程池运行两个
    future1=pool.submit(run,1)
    future2=pool.submit(run,2)
    future3 = pool.submit(run, 3)#
    #查看线程1是否完成
    print(future1.done())#线程池结束
    time.sleep(3)
    print(future2.done())

    # h获取线程1返回值
    # print(future1.result())#使用会阻塞线程
    #h获取线程三返回值
    future1.add_done_callback(callback)
    # print(future3.result())
    future3.add_done_callback(callback)
    # pool.shutdown()#关闭后不能使用线程池
    print('程序结束')
    result=pool.map(run,[7,8,9])
    print(result)
    for i in result:
        print(i)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值