Я пытаюсь разделить задачу поиска исторических данных о ценах на акции для списка символов с помощью Pool
из библиотеки multiprocessing
.Переменные Python не определены после if __name__ == '__main__'
Это отлично работает, пока я не попытаюсь использовать данные, которые я возвращаю. У меня установлена моя функция hist_price
, и она выводится в список-of-dicts pcl
. Я могу print(pcl)
, но это было безупречно, но если я попытаюсь сделать print(pcl)
после блока if __name__=='__main__':
, он взорвется, сказав, что pcl
не определено. Я попытался объявить global pcl
в нескольких местах, но это не имеет значения.
from multiprocessing import Pool
syms = ['List', 'of', 'symbols']
def hist_price(sym):
#... lots of code looking up data, calculations, building dicts...
stlh = {"Sym": sym, "10D Max": pcmax, "10D Min": pcmin} #simplified
return stlh
#global pcl
if __name__ == '__main__':
pool = Pool(4)
#global pcl
pcl = pool.map(hist_price, syms)
print(pcl) #this works
pool.close()
pool.join()
print(pcl) #says pcl is undefined
#...rest of my code, dependent on pcl...
Я также попытался удалить if __name__=='__main__':
блок, но это дает мне RuntimeError говорил мне специально, чтобы вернуть его. Есть ли другой способ вызова переменных для использования вне блока if
?
У вас есть 'if __name __ == '__ main __':' потому что вы используете сценарий с терминала или по какой-то другой причине? –
@MosesKoledoye Вероятно, потому что OP использует многопроцессорную обработку. – poke
@poke oh Ok. по-видимому, так. –