python concurrent库多线程示例

from concurrent.futures import ThreadPoolExecutor
import concurrent.futures
import threading

import time



def task(n):
    print(f"task {n} start")
    time.sleep(n)
    print(f"task {n} end")
    return n


if __name__ == '__main__':
    searchpool = ThreadPoolExecutor(3)

    t1 = searchpool.submit(task,2)
    t2 = searchpool.submit(task,1)

    print(t1)
    print(t2)

    time.sleep(2)
    print(t1.result())
    print(t2)

    # list
    a = list()
    a.append(searchpool.submit(task,2))
    print(a)
    time.sleep(3)
    print(a)
    print(a[0].result())

    # dict
    b = dict()
    b['test'] = searchpool.submit(task,2)
    print(b['test'])
    time.sleep(3)
    print(b)
    print(b['test'])

通过concurrent.futures 创建线程,可以放入到listdict中,方便获取线程运行完成之后的结果

其他库:threading,threadpool

threading是Python标准库中内置的线程池实现,而ThreadPool是一个第三方库。它们都可以用于在Python中创建线程池,但是它们的功能和用法有所不同。

threading是一个比较基础的线程池实现,提供了创建和管理线程的基本功能,例如线程的创建、启动、暂停、恢复和终止。然而,它不支持高级功能,例如定时任务、异步执行和中断线程。因此,如果您只需要基本的线程池功能,那么threading可能是一个不错的选择。

相比之下,ThreadPool提供了更多的高级功能,例如定时任务、异步执行、中断线程和自定义线程池大小。它的API也更加简单易用,支持使用with语句自动管理线程池的生命周期。

threadpool 示例

import time
import threadpool

# 定义一个任务函数,用于模拟耗时操作
def task(i):
    print(f"开始执行任务 {i}")
    time.sleep(2)
    print(f"任务 {i} 执行完毕")

if __name__ == '__main__':


    # 创建线程池,大小为3
    pool = threadpool.ThreadPool(3)

    # 创建任务列表,其中包含10个任务
    tasks = [i for i in range(1, 11)]

    # 创建任务请求,每个任务请求执行一个任务
    requests = threadpool.makeRequests(task, tasks)

    # 将任务请求提交给线程池
    for req in requests:
        pool.putRequest(req)

    # 等待所有任务执行完毕
    pool.wait()

    print("所有任务执行完毕")

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值