"""
一个列表中有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()