【问题标题】:globals() does not work with concurrent.futures module?globals() 不适用于 concurrent.futures 模块?
【发布时间】:2021-05-07 16:08:19
【问题描述】:

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

import finviz

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

finvizxl('AAPL')

print(AAPL)

print(AAPL) 使用 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)

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

但是,当我这样做时:

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 global-variables concurrent.futures


    【解决方案1】:

    如果您使用的是进程池,则不会。每个池项都有自己的进程,具有完全独立的 Python 解释器和完全独立的内存空间。 concurrent 试图随机选择你需要的东西,但没有实时连接。

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

    【讨论】:

      猜你喜欢
      • 2019-07-11
      • 1970-01-01
      • 2021-02-07
      • 1970-01-01
      • 2020-03-16
      • 2017-01-22
      • 1970-01-01
      • 2020-11-23
      • 1970-01-01
      相关资源
      最近更新 更多