globals() 不适用于 concurrent.futures 模块?

globals() does not work with concurrent.futures module?

这是我没有concurrent.futures的代码:

import finviz

def finvizxl(ticker):
        data = finviz.get_stock(ticker)
        globals()[ticker] = data

finvizxl('AAPL')

print(AAPL)

print(AAPL) returns 使用 finviz 模块和 finviz.get_stock 方法的 AAPL 股票信息。 globals() 函数将我的 'AAPL' 字符串转换为一个变量来存储 data

这是我的代码 concurrent.futures:

import finviz
import concurrent.futures

def finvizxl(ticker):
    data = finviz.get_stock(ticker)
    globals()[ticker] = data
    
if __name__ == '__main__':
    with concurrent.futures.ProcessPoolExecutor() as executor:
        x = ['AAPL', 'TSLA', 'GME']
        executor.map(finvizxl, x)

print(AAPL)

我的目标是同时 运行 我的函数 finvizxl() 并将 data 分别存储在转换后的字符串 'AAPL', 'TSLA', 'GME' 中,这样当我输入print(aapl),将返回相应代码的股票信息。 但是,我收到此错误:

NameError: name 'AAPL' is not defined

当我将 print(AAPL) 放入函数中时,

def finvizxl(ticker):
    data = finviz.get_stock(ticker)
    locals()[ticker] = list(data.values())
    print(AAPL)
    
if __name__ == '__main__':
    with concurrent.futures.ProcessPoolExecutor() as executor:
        x = ['AAPL', 'TSLA', 'GME']
        executor.map(finvizxl, x)

程序 运行s 但没有返回任何内容。

但是,当我这样做时:

def finvizxl(ticker):
    data = finviz.get_stock(ticker)
    locals()[ticker] = list(data.values())
    print(locals()[ticker])
    
if __name__ == '__main__':
    with concurrent.futures.ProcessPoolExecutor() as executor:
        x = ['AAPL', 'TSLA', 'GME']
        executor.map(finvizxl, x)

我的所有 3 个代码 ['AAPL', 'TSLA', 'GME'] 都在终端中返回了它们的信息。

我刚开始学习时可能遗漏了一些基本的东西 python。感谢您的帮助。

如果您使用的是进程池,则不会。每个池项都有自己的进程,具有完全独立的 Python 解释器和完全独立的内存 space。 concurrent 尝试随机播放您需要的内容,但没有实时连接。

如果您需要发回结果,您可以考虑使用 multiprocessing.Queue。它知道如何跨进程边界编组事物。