Python 线程和多处理



这是我的代码:

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时,主线程和启动的进程拥有完全独立的内存空间。

相关内容

  • 没有找到相关文章

最新更新