Python多進程庫之一個函數讓你設置CPU數和線程數
來源:程序員人生 發布時間:2016-04-29 08:39:04 閱讀次數:5162次
【Python多進程庫】1個函數讓你設置CPU數和線程數
Tags: Python 多線程 多進程
博客雖水,然亦博主之苦勞也。
如對代碼有興趣的請移步我的 Github:https://github.com/cyh24/multicpu。
如需轉載,請附上本文鏈接,不甚感激!
http://blog.csdn.net/cyh_24/article/details/49314709
multicpu
使用multicpu以后,你需要1個函數,就能夠定義你程序運行時所需的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密集型
import time def process_job(job): time.sleep(1) return job
jobs = [i for i in range(20)]
如果你的程序 IO密集型
import time def process_job(job): count = 100000000 while count>0:
count -= 1 return job
jobs = [i for i in range(20)]
沒有使用任何多線程處理的方法:
import time if __name__ == "__main__": result = [] for job in jobs: result.append(process_job(job))
使用了python的線程池:
import time from concurrent import futures if __name__ == "__main__": result = []
thread_pool = futures.ThreadPoolExecutor(max_workers=10) result = thread_pool.map(process_job, jobs)
使用multicpu:
import time from concurrent import futures 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
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈