Re: [問題] python multiProcess效能很差?
其實沒有完整的程式碼,以及可重現問題的測試資料,對於多數的人來說包括我自己 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
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.219.36.31
※ 文章網址: https://www.ptt.cc/bbs/Python/M.1430452740.A.F4E.html
※ 編輯: LiloHuang (61.219.36.31), 05/01/2015 12:28:28
推
05/02 20:29, , 1F
05/02 20:29, 1F
討論串 (同標題文章)
完整討論串 (本文為第 3 之 4 篇):