Python многопоточность и многопроцессорность - PullRequest
0 голосов
/ 23 мая 2018

Это мой код:

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]

Когда я изменяю поток в Process, результат:

Value of x is: 0
Value of y is: []

Почему +5 для x не работает, когда добавление для y работает?

И почему, когда я использую Process, +5 и добавление не работают?

1 Ответ

0 голосов
/ 23 мая 2018

Я предлагаю вам прочитать учебник , прежде чем задавать базовые вопросы, так как это сэкономит время каждого, включая ваше.

Короче говоря, когда вы используете Thread, основной поток и запущенный потокиспользовать то же пространство памяти, но x в функции foo - это другой внутренний x, но не такой же x снаружи.Таким образом, вы просто меняете внутренний x, но не x снаружи.Кроме того, на самом деле y также является внутренним y, но вы изменяете то, на что оно указывает, но не само по себе.Вы можете подтвердить это, изменив y.append(5) на y = [0], чтобы увидеть, изменится ли внешняя y.

И, когда вы используете Process, основной поток и запущенный процесс сохраняют полностью отдельное пространство памяти.

...