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
。它知道如何跨进程边界编组事物。
这是我没有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
。它知道如何跨进程边界编组事物。