多线程、队列、装饰器统计时间

"""
一个列表中有100个url地址(每个请求0.5秒),设计一个程序,获取列表的url地址
使用5个线程去发送这100个请求,计算出总共请求的时间
"""
import queue
import time
from multiprocessing.pool import ThreadPool


def download(q: queue.Queue):
    while not q.empty():
        print(q.get())  # 获取下载的url地址
        time.sleep(0.5)
        q.task_done()  # 这个任务做完了


# 统计时间装饰器
def calc_time(func):
    def wrap(*args, **kwargs):
        start = time.time()
        func(*args, **kwargs)
        end = time.time()
        print(f"共花费时间{(end - start):.2f}秒")
    # 将函数本身返回
    return wrap


@calc_time
def main():
    # 创建队列
    q = queue.Queue()
    for i in range(100):
        # 在队列中放入(put)值
        q.put(f"http://www.qushi.com/page={i}")
    pool = ThreadPool(5)  # 5个线程
    pool.apply_async(download, args=(q,))  # pool中的多个线程异步调用指定函数:download
    q.join()  # 等待所有的任务完成
    print("任务完成")


if __name__ == '__main__':
    main()

 

posted on 2024-06-06 11:45  诚实的表达自己  阅读(1)  评论(0编辑  收藏  举报