其实没有完整的程式码,以及可重现问题的测试资料,对于多数的人来说包括我自己 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