热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Python:如何使用pprocess修改函数中的全局变量

当使用从pprocess调用的函数时,我似乎无法在Python中修改全局变量.这是我的例子:importpprocessimporttimenumbers[0,0,0,0,0,0,

当使用从pprocess调用的函数时,我似乎无法在Python中修改全局变量.这是我的例子:

import pprocess
import time
numbers=[0,0,0,0,0,0,0,0,0,0]
# find system time and store in global variable
def find_time(index):
global numbers
x=time.time()
print "Setting element %s of numbers to %f" % (index, x)
numbers[index]=x
return x
# parallel execution of the function
results=pprocess.pmap(find_time, [0,1,2,3,4,5,6,7,8,9], limit=6)
for y in results:
print '%f' % y
# this list is unchanged
print numbers
# serial execution of the function
for x in [0,1,2,3,4,5,6,7,8,9]:
find_time(x)
# now it seems to work
print numbers

“numbers”只是一个零列表,为了演示,我试图将每个列表元素设置为当前系统时间.当使用pprocess调用时,这不起作用,但是当我使用一个简单的for循环来调用该函数时,全局变量就会改变.

我花了一些时间阅读全球变量,并真诚地希望这不是一个微不足道的问题.任何人都可以向我解释发生了什么事吗?

非常感谢,

恩诺

解决方法:

我的理解是pprocess使用了底层处理.如果是这种情况,那么每次运行该函数时,它实际上都是一个单独的过程.因此,当函数返回时,这些更改不会显示.

您可能需要将列表设为multiprocessing.Manager.

例如

numbers = multiprocessing.Manager().list([0]*10)


推荐阅读
author-avatar
手机用户2602904231
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有