python全局变量在程序执行的全过程有效,全局变量和Python多处理

I am using a computer with many cores and for performance benefits I should really use more than one. However, I'm confused why these bits of code don't do what I expect:

from multiprocessing import Process

var = range(5)

def test_func(i):

global var

var[i] += 1

if __name__ == '__main__':

jobs = []

for i in xrange(5):

p = Process(target=test_func,args=(i,))

jobs.append(p)

p.start()

print var

As well as

from multiprocessing import Pool

var = range(5)

def test_func(i):

global var

var[i] += 1

if __name__ == '__main__':

p = Pool()

for i in xrange(5):

p.apply_async(test_func,[i])

print var

I expect the result to be [1, 2, 3, 4, 5] but the result is [0, 1, 2, 3, 4].

There must be some subtlety I'm missing in using global variables with processes. Is this even the way to go or should I avoid trying to change a variable in this manner?

解决方案

If you are running two separate processes, then they won't be sharing the same globals. If you want to pass the data between the processes, look at using send and recv. Take a look at http://docs.python.org/library/multiprocessing.html#sharing-state-between-processes for an example similar to what you're doing.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Python 中的全局变量是在函数外部定义的变量,可以在程序的任何位置进行访问和修改。在函数内部可以使用 `global` 关键字来声明一个变量全局变量,这样就可以在函数内部修改这个全局变量的值。 例如,下面的代码定义了一个全局变量 `count`,并在函数 `increment()` 中使用了 `global` 关键字来声明 `count` 为全局变量: ```python count = 0 def increment(): global count count += 1 print(count) increment() # 输出 1 increment() # 输出 2 ``` 注意,如果在函数内部没有使用 `global` 关键字来声明变量全局变量,那么 Python 会将它视为局部变量,而不是全局变量。如果在函数内部对这个变量进行修改,那么只会影响到函数内部的这个局部变量,而不会影响到全局变量。 ### 回答2: Python中,全局变量是在程序的所有函数之外声明的变量,可以在整个程序中的任何地方使用。 声明全局变量的方法是在函数外部直接使用变量名进行赋值,不需要使用任何关键字。 在函数内部,如果要访问全局变量,需要使用关键字`global`来标识该变量全局变量,否则会被当作局部变量处理。 如果在函数内部对全局变量进行修改,在函数调用结束后,全局变量的值也会被修改。 全局变量的作用范围是整个程序,可以在不同的函数中进行访问和修改。 全局变量的好处是可以在不同的函数中共享数据,简化了函数之间传递参数的过程。 然而,滥用全局变量可能导致程序的可读性和可维护性降低,容易造成变量之间的混淆和不必要的依赖关系。 因此,在编程中应该尽量避免过多地使用全局变量,可以使用函数的参数来传递数据,或者使用局部变量处理函数内部的计算。 ### 回答3: 在Python中,全局变量是在函数外部定义的变量,其作用域在整个程序中都是可见的。全局变量可以在程序的任何地方使用,包括函数内部。如果在函数内部对全局变量进行修改,需要使用`global`关键字来声明该变量全局变量全局变量的好处是可以在整个程序中共享数据,方便在不同函数之间传递信息。另外,全局变量可以在函数内部被修改,然后在其他地方使用该变量的新值。 然而,滥用全局变量也具有一些问题。首先,全局变量容易导致命名冲突,如果多个函数中出现同名的全局变量,可能会引起代码中的混乱。其次,全局变量破坏了封装性,使得函数之间的依赖性增加,降低了代码的可维护性和可测试性。 因此,在使用全局变量时需要明智地选择使用场景,并尽量减少全局变量的使用。可以考虑使用函数参数和返回值来传递信息,或者使用对象的属性来保存状态。此外,模块间的变量也可以通过导入模块的方式进行共享。 总结起来,全局变量Python中是一种便捷的共享数据的方式,但需要注意命名冲突和代码混乱的问题,并尽量避免滥用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值