Глобальные переменные не сохраняются (два модуля плюс файл config)
Не получается передать переменную их одного модуля в другой. Одно из решений нашел - это передача переменной через сохранение в фале config.py. Но и так не получается.
Эти три файла - примерное моделирование, как в моем проекте. Но результат получается точно такой же. Поэтому, решение, скорее всего, будет одинаковое.
Три файла:
Первый: first.py
import second
def search_form():
city = 'New York'
second.parser_fotos(city)
if __name__ == '__main__':
search_form()
Второй: second.py
from multiprocessing.pool import Pool
import config
def parser_fotos(city):
config.city = city
pool_handler()
def pool_handler():
with Pool() as pool:
pool.map(get_person_info, range(3))
print(config.city)
def get_person_info(lst):
print(config.city, lst)
Третий: config.py
city = 'San Francisco'
В функции get_person_info печатает San Francisco (из config.py). А надо New York. А вот в pool_handler - New York. Но мне нужен результат в этой функции - get_person_info.
Прошу помощи.
Ответы (1 шт):
Глобальные переменные не сохраняются, потому что они у каждого процесса свои. При старте нового процесса происходит инициализация переменных заново. Это легко можно увидеть, если добавить print("init") в config.py.
Читайте еще подробности тут
Конкретно эту проблему можно исправить передавая параметр явно, например, используя partial:
# second.py
from functools import partial
from multiprocessing.pool import Pool
import config
def parser_fotos(city):
pool_handler(city)
def pool_handler(city):
with Pool() as pool:
pool.map(partial(get_person_info, city), range(3))
print(config.city)
def get_person_info(city, lst):
print(city, lst)