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 创建线程,可以放入到list和dict中,方便获取线程运行完成之后的结果
threading是Python标准库中内置的线程池实现,而ThreadPool是一个第三方库。它们都可以用于在Python中创建线程池,但是它们的功能和用法有所不同。
threading是一个比较基础的线程池实现,提供了创建和管理线程的基本功能,例如线程的创建、启动、暂停、恢复和终止。然而,它不支持高级功能,例如定时任务、异步执行和中断线程。因此,如果您只需要基本的线程池功能,那么threading可能是一个不错的选择。
相比之下,ThreadPool提供了更多的高级功能,例如定时任务、异步执行、中断线程和自定义线程池大小。它的API也更加简单易用,支持使用with语句自动管理线程池的生命周期。
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("所有任务执行完毕")