python 线程池的使用

线程池的基类是 concurrent.futures 模块中的 Executor,Executor 提供了两个子类,即 ThreadPoolExecutor 和 ProcessPoolExecutor,其中 ThreadPoolExecutor 用于创建线程池,而 ProcessPoolExecutor 用于创建进程池。

# 线程池的使用示例,
from concurrent.futures import ThreadPoolExecutor,TimeoutError 
import threading
import time

# 定义一个准备作为线程任务的函数
def action(max):
    my_sum = 0
    for i in range(max):
        # print(threading.current_thread().name + '  ' + str(i))
        my_sum += i
        time.sleep(0.1)
    return str(max)+':'+str(my_sum)


# 创建一个包含4条线程的线程池,使用map,没有设置线程的超时
def pool_run():
    with ThreadPoolExecutor(max_workers=4) as pool:
        # 使用线程执行map计算
        # 后面元组有3个元素,因此程序启动3条线程来执行action函数
        results = pool.map(action, (50, 100, 150))
        print('--------------')
        for r in results:
            print(r)


# 设置线程超时时间的示例
def pool_set_timeout():
    futures = []
    with ThreadPoolExecutor(max_workers=4) as pool:
        for i in (10,20,50):
            future = pool.submit(action,i)
            futures.append([i,future])
        for future in futures:
            try:
                r=future[1].result(timeout=3)
                print(r)
            except TimeoutError:
                print(future[0],': is timeout')

if __name__ == '__main__':
    pool_set_timeout()

 

posted on 2022-09-08 16:29  sdlyxyf  阅读(131)  评论(0编辑  收藏  举报

导航