You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在导入模块时访问script.py中__main__块内的futures字典?

解决从其他脚本访问script.py中futures字典的问题

问题根源在于:当你从其他脚本导入script.py时,脚本的__name__变量值是script而非__main__,所以if __name__ == '__main__':代码块里的逻辑不会执行,futures字典始终是空的。

给你两个实用的解决办法:

方法1:封装成可调用的函数

把创建和填充futures的逻辑封装成一个函数,其他脚本导入后主动调用该函数获取填充好的字典:

修改后的script.py代码:

import pandas as pd
import concurrent.futures

files = ['1.xlsx','2.xlsx']
futures = {}

def init_futures():
    global futures  # 声明使用全局的futures变量
    with concurrent.futures.ProcessPoolExecutor() as executor:
        for filename in files:
            future = executor.submit(pd.read_excel, filename)
            futures[filename] = future
    return futures

if __name__ == '__main__':
    init_futures()

其他脚本中调用的方式:

import script

# 调用函数初始化并获取futures
futures_dict = script.init_futures()
# 或者直接访问script.futures,此时已经被函数填充
print(script.futures)

方法2:移出__main__代码块(谨慎使用)

如果确定不需要避免导入时执行多进程逻辑,可以把填充futures的代码移出__main__块,但要注意:这种方式会在你导入script.py时自动执行多进程任务,可能导致不必要的资源消耗,甚至引发多进程导入的潜在问题:

修改后的script.py代码:

import pandas as pd
import concurrent.futures

files = ['1.xlsx','2.xlsx']
futures = {}

with concurrent.futures.ProcessPoolExecutor() as executor:
    for filename in files:
        future = executor.submit(pd.read_excel, filename)
        futures[filename] = future

if __name__ == '__main__':
    # 这里可以保留原有的主逻辑
    pass

其他脚本导入后直接访问:

import script
print(script.futures)

推荐使用方法1,因为它更可控,能避免导入时意外执行耗时的多进程任务。

内容的提问来源于stack exchange,提问作者lagrangian_headache

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 07:36:20