python多进程map_使用Python pool.map让多个进程对列表执行操作

部分问题在于您没有处理池的多进程性质(请注意,在Python中,MultiThreading由于Global Interpreter Lock而无法获得性能).

你有必要改变原始清单吗?您当前的代码不使用传入的iterable,而是编辑共享的可变对象,这在并发的世界中是危险的.一个简单的解决方案如下:

from multiprocessing import Pool

files = ['a','b','c','d','e','f']

def convert(aFile):

print aFile

if __name__ == '__main__':

pool = Pool() #note the default will use the optimal number of workers

pool.map(convert,files)

你的问题让我思考,所以我做了一些探索,以了解Python为何以这种方式行事.似乎Python正在做一些有趣的黑魔法和深度复制(同时保持id,这是非标准的)对象进入新进程.通过更改使用的数量或过程可以看出这一点:

from multiprocessing import Pool

files = ['d','e','f','a','b','c',]

a = sorted(files)

def convert(_):

print a == files

files.sort()

#print id(files) #note this is the same for every process, which is interesting

if __name__ == '__main__':

pool = Pool(processes=1) #

pool.map(convert,range(6))

==>除了第一次调用之外,所有内容都按预期打印“True”.

如果将数字或进程设置为2,则它的确定性较低,因为它取决于哪个进程首先实际执行其语句.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值