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("所有任务执行完毕")

你可能感兴趣的:(python,python,开发语言,threading)