作者LiloHuang (十年一刻)
看板Python
标题Re: [问题] python multiProcess效能很差?
时间Fri May 1 11:58:57 2015
其实没有完整的程式码,以及可重现问题的测试资料,对於多数的人来说包括我自己 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://webptt.com/cn.aspx?n=bbs/Python/M.1430452740.A.F4E.html
※ 编辑: LiloHuang (61.219.36.31), 05/01/2015 12:28:28
1F:推 ntuleo: 感谢你热心的回应,我再想想 05/02 20:29