这是我的代码:
from threading import Thread
from multiprocessing import Process
def foo(x, y):
x += 5
y.append(5)
if __name__ == '__main__':
x = 0
y = []
thread = Thread(target=foo, args=(x, y,))
thread.start()
thread.join()
print 'Value of x is: ' + str(x)
print 'Value of y is: ' + str(y)
当我运行此代码时,结果是:
Value of x is: 0
Value of y is: [5]
当我将线程更改为进程时,结果是:
Value of x is: 0
Value of y is: []
为什么 x 的 +5 不起作用,而 y 的附加有效?
而且,为什么当我使用进程时,+5 和附加都不起作用?
我建议您在提出基本问题之前阅读教程,因为它可以节省每个人的时间,包括您的时间。
简而言之,当您使用Thread
时,主线程和启动线程共享相同的内存空间,但函数foo
中的x
是另一个内部x
,但外部x
不同。所以你只是改变内部x
而不是外部x
。此外,实际上y
也是一个内部y
,但你正在改变它所指向的东西,而不是它本身。您可以通过更改y.append(5)
y = [0]
来确认这一点,以查看外部y
是否会发生变化。
而且,当你使用Process
时,主线程和启动的进程拥有完全独立的内存空间。