【Python多进程库】一个函数让你设置CPU数和线程数
Tags: Python 多线程 多进程
博客虽水,然亦博主之苦劳也。
如对代码有兴趣的请移步我的 Github.
https://github.com/cyh24/multicpu如需转载,请附上本文链接,不甚感激!
http://blog.youkuaiyun.com/cyh_24/article/details/49314709
multicpu
使用multicpu之后,你需要一个函数,就可以定义你程序运行时所需的CPU数量和每个cpu占用的线程数量:
result = multi_cpu(process_job, jobs, cpu_num, thread_num)
cpu_num: 使用的CPU数量.
thread_num: 每个cpu占用的线程数量.
重点是,代码只有60行不到,你可以很轻松的阅读源码。
安装指南
multicpu 可以直接使用pip就可以安装了
pip install multicpu
或者,你也可以用git clone
下载源代码,然后用setup.py
安装:
git clone git@github.com:cyh24/multicpu.git
sudo python setup.py install
“Talk is cheap, show me your performance.”
因为源代码才60行不到,所以,你自己去看完全不会有卡住的地方,这里简单粗暴地直接上测试代码:
如果你的程序是 不是IO密集型
def process_job(job):
time.sleep(1)
return job
jobs = [i for i in range(20)]
如果你的程序 IO密集型
def process_job(job):
count = 100000000
while count>0:
count -= 1
return job
jobs = [i for i in range(20)]
没有使用任何多线程处理的方法:
if __name__ == "__main__":
result = []
for job in jobs:
result.append(process_job(job))
使用了python的线程池:
from concurrent import futures
if __name__ == "__main__":
result = []
thread_pool = futures.ThreadPoolExecutor(max_workers=10)
result = thread_pool.map(process_job, jobs)
使用multicpu:
from multicpu import multi_cpu
if __name__ == "__main__":
result = multi_cpu(process_job, jobs, 10, 1)
效果:
Function | Non-Thread | Multi-Thread(10) | multicpu(10,1) | multicpu(10,2) |
---|---|---|---|---|
IO | 146.42 (s) | 457.53 (s) | 16.34 (s) | 42.81 (s) |
Non-IO | 20.02 (s) | 2.01 (s) | 2.02 (s) | 1.02 (s) |
How Does it Work?
Feel free to read the source for a peek behind the scenes – it’s less than 60 lines of code.