Python高级培训第五课

定时器

什么是定时器:原理为执行函数中置定时函数Timer(),递归调用自己。

注意:

1.定时器构造函数主要有2个参数,第一个参数为时间,第二个参数为函数名,第一个参数表示多长时间后调用后面第二个参数指明的函数。

2.必须在定时器执行函数内部重复构造定时器,因为定时器构造后只执行1次,必须循环调用。

3.定时器间隔单位是秒,可以是浮点数。

4.可以使用cancel停止定时器的工作。

简单示例:

import time
import threading

def run():
    print('定时器启动了')

t1 = threading.Timer(5,function=run)
t1.start()

队列

常用方法:

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() #实际上意味着等到队列为空,再执行别的操作

什么是队列:队列可以并发的派多个线程,对排列的线程处理,并切每个需要处理线程只需要将请求的数据放入队列容器的内存中,线程不需要等待,当排列完毕处理完数据后,线程在准时来取数据即可。

作用:解耦:使程序直接实现松耦合,修改一个函数,不会有串联关系。

简单示例:

class Queue(object):
    def __init__(self):
        self.__list = []
    def enqueue(self,item):
        # 入队
        #尾部进队,头部出队
        self.__list.append(item)
        #头部进队,尾部出队
        # self.__list.insert(0,item)
    def dequeue(self):
        #出队
        return self.__list.pop(0)
        # return self.__list.pop()
    def is_empty(self):
        #判断是否为空
        return self.__list == []
    def size(self):
        #判断大小
        return len(self.__list)
if __name__ == '__main__':
    s = Queue()
    s.enqueue(1)
    s.enqueue(2)
    s.enqueue(3)
    print(s.dequeue())
    print(s.dequeue())
    print(s.dequeue())

 

线程池

为什么使用线程池:系统启动一个新线程的成本是比较高的,因为它涉及与操作系统的交互。在这种情形下,使用线程池可以很好地提升性能。程序只要将一个函数提交给线程池,线程池就会启动一个空闲的线程来执行它。当该函数执行结束后,该线程并不会死亡,而是再次返回到线程池中变成空闲状态,等待执行下一个函数。

怎样实现:

调用 ThreadPoolExecutor 类的构造器创建一个线程池。 定义一个普通函数作为线程任务。
调用 ThreadPoolExecutor 对象的 submit() 方法来提交线程任务。 当不想提交任何任务时,调用
ThreadPoolExecutor 对象的 shutdown() 方法来关闭线程池。

简单示例:

from concurrent.futures import ThreadPoolExecutor
import requests

pool = ThreadPoolExecutor(10)

def task(url):
    response = requests.get(url)
    print(url,response)



url_list = (
    "https://www.bing.com",
    "https://www.shihu.com",
    "https://www.sina.com",
    "https://www.baidu.com",
    "https://www.cnblogs.com",
    "https://music.163.com/#"
)

for url in url_list:
    pool.submit(task,url)

pool.shutdown(wait=True)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值