Я переписывал свое приложение.Хотя я хотел использовать глобальную переменную для передачи некоторой информации в функцию.Я заметил, что значение глобальной переменной не изменилось после ее изменения.Кроме того, я заметил, что поведение отличается в зависимости от синтаксиса «pool.map_async».Ниже приведен код, который воспроизводит эту ошибку.
Первый пример: когда у задания нет параметров, но я передаю "job ()" в "= func", например, "func = job ()" (передача только «задания» выглядит так, как будто процесс не выполняется)
from multiprocessing import Pool
x = None
def job():
print(x,"Inside Job")
def main():
global x
x = 10
pool = Pool(1)
li = [0]
pool.map_async(iterable=li,func=job())
pool.close()
pool.join()
print("End of main")
if __name__ == "__main__":
print(x,"Before")
main()
print(x,"After")
Вывод на консоль
None Before
10 Inside Job
End of main
10 After
Вывод, как и ожидалось, значение x внутризадание правильное.
Теперь, если позволить функции заданию принять любой аргумент, как показано ниже
from multiprocessing import Pool
x = None
def job(z):
print(z)
print(x,"Inside Job")
def main():
global x
x = 10
pool = Pool(1)
li = [0]
pool.map_async(iterable=li,func=job)
pool.close()
pool.join()
print("End of main")
if __name__ == "__main__":
print(x,"Before")
main()
print(x,"After")
Вывод на консоль
None Before
0
None Inside Job
End of main
10 After
Вывод показываетчто изменение значения x не было замечено.
Может кто-нибудь объяснить, почему использование «global» не работает, когда функция «job» принимает аргумент?
Я на Python 3.7.0