Re: [問題] python multiProcess效能很差?

作者: LiloHuang (十年一刻)   2015-05-01 11:58:57
其實沒有完整的程式碼,以及可重現問題的測試資料,對於多數的人來說包括我自己 XD
我相信很難隔空抓藥看出性能瓶頸,你的程式大致上看來有其他板友提到的諸多問題,
設計上沒有滿足平行程式設計的諸多條件,你得多仔細琢磨大家的意見。
以下的範例是隨機產生一些 UUID 字串,然後把字串相接起來,跟你的問題有點類似
在我的桌上型電腦(4 cores),平行版本耗費 3.35 秒,循序版本耗費 12.17 秒。
希望你看完之後會有一些想法,你也可以考慮使用 pool.apply_async 的作法,不一定
要侷限在使用 pool.map 的寫法上,祝你順利!
# coding=Big5
from multiprocessing.pool import Pool
import uuid
import datetime
def handleTask(uuid_gen):
return ''.join([uuid_gen().hex for i in xrange(16384)])
if __name__ == '__main__':
start = datetime.datetime.now()
tasks = [uuid.uuid4 for i in xrange(64)]
enable_multiprocess = True # 改這個來切換循序跟平行
if enable_multiprocess:
pool = Pool()
result = ''.join(pool.map(handleTask, tasks))
else:
result = ''.join([handleTask(task) for task in tasks])
# 由於 UUID 會產生隨機字串,在這邊確認兩個版本長度相同即可
print 'result length: ', len(result)
print datetime.datetime.now() - start
作者: ntuleo (里歐)   2015-05-02 20:29:00
感謝你熱心的回應,我再想想

Links booklink

Contact Us: admin [ a t ] ucptt.com