首页 > 其他分享 >多线程、队列、装饰器统计时间

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

时间:2024-06-06 11:57:10浏览次数:15  
标签:__ 队列 def time download 多线程 装饰 pool

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

 

标签:__,队列,def,time,download,多线程,装饰,pool
From: https://www.cnblogs.com/python-test001/p/18234857

相关文章

  • 【Linux多线程】线程的终止、等待和分离
    文章目录线程终止正常退出return退出pthread_exit函数终止线程pthread_cancel强制终止线程进程终止线程等待为什么需要等待线程?pthread_join函数分离线程pthread_detach函数线程终止下面给出终止线程的三种方式:正常退出:线程执行完它的函数之后return自动结......
  • SpringAMQP的工作队列WorkQueue
    Workqueue,工作队列,可以提高消息处理速度,避免队列消息堆积 模拟WorkQueue,实现一个队列绑定多个消费者基本思路如下:在publisher服务中定义测试方法,每秒产生50条消息,发送到simple.queue在consumer服务中定义两个消息监听者,都监听simple.queue队列一个消息监听者每秒处理50条消......
  • 多线程interrupt()方法
    interrupt()方法:配合isInterrupted()方法可以合理打断线程,让线程处理好事务后停止。打算一个非阻塞状态的线程效果publicclasstest{publicstaticvoidmain(String[]args){Runnabler=()->{while(true){booleaninterrup......
  • 【Go-多线程】Golang的channel实现消息的批量处理
    【Go-多线程】Golang的channel实现消息的批量处理。当消息量特别大时,使用kafka之类的messagequeue是首选,但这是更加轻量的方案channelx.go//这个方案需要实现以下几点://1.消息聚合后处理(最大条数为BatchSize),核心://(1)带buffer的channel相当于一个FIFO的队列//(2)多个常驻的gorou......
  • 多线程实现爬取图片
    importosimportthreadingimportrequestsfromget_img_urlimportget_img_url#下载单张图片方法,方法入参为图片url地址和图片名称defdownload_image(url,filename):response=requests.get(url)withopen(filename,'wb')asf:f.write(respon......
  • 用Redisson的延迟队列RDelayedQueue处理延迟任务或者定时任务
    什么是RedissonRedisson在基于NIO的Netty框架上,充分的利用了Redis键值数据库提供的一系列优势,在Java实用工具包中常用接口的基础上,为使用者提供了一系列具有分布式特性的常用工具类。什么是RDelayedQueue获取RDelayedQueue:public<V>RDelayedQueue<V>getDelayedQueue(R......
  • 算法训练营第10天|理论基础 232.用栈实现队列 225. 用队列实现栈
    理论基础Java中实现栈有以下两种方式:stack类LinkedList实现(继承了Deque接口)(1)Stack实现Stack底层是使用Vector的,而Vector支持线程同步,所以整体性能相对较低,如果没有多线程的场景,不建议使用Stack。(2)LinkedList实现LinkedList实现了List,Deque(实现了Queue接口)的接口,底层是双......
  • 【第三节】C/C++数据结构之栈与队列
    目录一、数据结构-栈1.1栈的定义1.2栈的ADT(AbstractDataType)1.3栈的顺序存储结构及实现二、数据结构-队列2.1队列的定义2.2队列的ADT2.3队列的顺序存储结构与实现2.4优先队列一、数据结构-栈1.1栈的定义栈(Stack)可以看成是一种特殊的线性表。限......
  • Qt中的多线程与线程池浅析+实例----冒泡排序和快速排序
    转自:https://www.cnblogs.com/wanghongyang/p/14902679.html今天学习了Qt中的多线程和线程池,特写这篇博客来记录一下2|02.多线程2|12.1线程类QThreadQt中提供了一个线程类,通过这个类就可以创建子线程了,Qt中一共提供了两种创建子线程的方式,先看一下这个类中提供的一些常用......
  • 数据结构·栈和队列
    栈栈(Stack):只允许在一端插入或删除的线性表栈顶:线性表允许进行插入或删除的那一端栈底:固定的,不允许进行插入和删除的另一端特点:是受限的线性表,拥有线性关系;后进先出LIFO顺序栈使用顺序存储,自底向上存储数据元素,指针指向栈顶元素的位置操作s.top=-1;......