在多线程和协程中使用tqdm

多线程使用tqdm
import time
from concurrent import futures
from tqdm import tqdm

MAX_WORKER = 5


def delay(n):
    time.sleep(n)
    return f'result: {n}'


def main():
    tasks, results = [], []
    with futures.ThreadPoolExecutor(max_workers=MAX_WORKER) as executor:
        for n in range(5):
            tasks.append(executor.submit(delay, n))
        for task in tqdm(futures.as_completed(tasks), total=len(tasks)):
            results.append(task.result())
    print(results)


if __name__ == '__main__':
    main()
协程中使用tqdm
import tqdm
import asyncio

async def delay(n):
    await asyncio.sleep(n)
    return f'result: {n}'

async def main():
    tasks, results = [], []
    for n in range(5):
        tasks.append(asyncio.create_task(delay(n)))
    for t in tqdm(asyncio.as_completed(tasks), total=len(tasks)):
        results.appent(await t)
    print(results)

if __name__ == '__main__':
    asyncio.run(main())
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
使用多线程协程可以让程序同时执行多个任务,从而提高程序的效率。但需要注意,多线程/协程并不是越多越好,过多的线程/协程反而会降低程序的效率。下面是一些使用多线程/协程的建议: 1.多线程适合I/O密集型任务,如网络请求、文件读写等,因为这些任务需要等待I/O操作完成,期间CPU空闲,可以让其他线程执行任务,避免浪费CPU资源。 2.协程适合CPU密集型任务,如计算密集型任务,因为协程可以在同一个线程切换执行,避免线程间上下文切换的开销。 3.使用Python标准库的`threading`模块实现多线程使用`asyncio`模块实现协程。 4.在多线程/协程,需要注意线程/协程之间的同步问题,如线程安全、锁等。 5.在使用协程时,需要使用`async/await`关键字来标识异步任务。 下面是一个使用多线程的例子: ```python import threading def worker(): print('Thread %s is running...' % threading.current_thread().name) threads = [] for i in range(5): t = threading.Thread(target=worker) threads.append(t) t.start() for t in threads: t.join() ``` 这个例子创建了5个线程,每个线程执行`worker`函数,并使用`join`方法等待线程执行完成。 下面是一个使用协程的例子: ```python import asyncio async def worker(): print('Coroutine is running...') await asyncio.sleep(1) print('Coroutine is done.') async def main(): print('Main coroutine is running...') await asyncio.gather(worker(), worker(), worker()) print('Main coroutine is done.') asyncio.run(main()) ``` 这个例子创建了3个协程,每个协程执行`worker`函数,使用`await asyncio.sleep(1)`模拟异步操作,然后返回结果。`main`函数使用`asyncio.gather`方法等待所有协程执行完成。最后,使用`asyncio.run`方法执行`main`协程
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值