Python第三方线程池模块threadpool

  |  

摘要: 本文介绍 Python 的第三方线程池模块 threadpool 的用法

【对数据分析、人工智能、金融科技、风控服务感兴趣的同学,欢迎关注我哈,阅读更多原创文章】
我的网站:潮汐朝夕的生活实验室
我的公众号:潮汐朝夕
我的知乎:潮汐朝夕
我的github:FennelDumplings
我的leetcode:FennelDumplings


背景

Python 的 concurrent.futures 模块提供了 ThreadPoolExcutor 和 ProcessPoolExecutor,实现了对 threading 和 multiprocessing 的进一步抽象。concurrent.futures 中的线程池有以下好处

  • 主线程可以获取某一个线程的状态以及返回值
  • 当一个线程完成的时候,主线程能够立即知道
  • 多线程和多进程的接口一致

除了 concurrent.futuresmultiprocessing.pool 中还有一个 ThreadPool 线程池组件。

本文我们来看一下 threadpool 这个第三方的线程池模块。

安装

1
pip install threadpool

使用流程

  • step1: 定义线程函数
  • step2: 创建线程池 threadpool.ThreadPool()
  • step3: 创建需要线程池处理的任务即 threadpool.makeRequests()
  • step4: 将创建的多个任务put到线程池中, threadpool.putRequest
  • step5: 等到所有任务处理完毕 theadpool.pool()

例子(代码模板)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import time
import threadpool

def sayhello(s):
print("Hello {}".format(s))
time.sleep(2)

name_list = ['aaaa', 'bbbb', 'cccc', 'dddd']

def baseline():
start_time = time.time()
for i in range(len(name_list)):
sayhello(name_list[i])
print('baseline: {:.6f} second'.format(time.time() - start_time))

def multithread():
start_time = time.time()
pool = threadpool.ThreadPool(10)
requests_list = threadpool.makeRequests(sayhello, name_list)
[pool.putRequest(req) for req in requests_list]
pool.wait()
print('multithread: {:.6f} second'.format(time.time() - start_time))


if __name__ == "__main__":
baseline()
multithread()

Share