You need to enable JavaScript to run this app. Python如何实现两个导入模块按先后顺序顺次执行
优惠活动
大模型
产品
解决方案
定价
更多

Python如何实现两个导入模块按先后顺序顺次执行

问题核心根源
  • 你当前遇到的两类异常现象,本质是Python执行逻辑和GUI框架特性叠加导致的:
    • Python的from 模块名 import *语法会在导入执行的瞬间,跑完全部目标模块顶层的代码,你写的导入顺序虽然是先跑Game的main再导入Typing模块,但Game模块的main()函数通常会启动GUI类程序的阻塞式事件循环,只要这个循环还在跑,主线程就会卡在当前行,根本走不到后面的导入语句。
    • 你看到“手动关Game窗口才加载Typing模块”,是因为手动关窗口时,GUI框架会捕获关闭事件,跳出阻塞的事件循环,主线程得以继续往下执行导入Typing模块的逻辑;而“Game流程正常结束时Typing模块不触发”,是因为你在Game模块的内部流程里,大概率写了直接终止整个进程的逻辑(比如调用sys.exit()、直接销毁进程),根本没机会执行到后续的代码行。
可直接落地的调整方案
  • 把跨模块的导入时机,放到上一个流程完全跑完之后,不要提前加载后续要运行的模块
  • 保证Game模块的main()函数在流程结束后自然返回,不要在模块内部直接强制终止整个进程
  • 调整后的代码参考:
# 先导入Game模块的入口,不提前加载后续模块
from Game import main as game_entry

# 等Game的全部流程执行完、函数返回后,再往下走
game_entry()

# 走到这里说明Game已经正常结束,再加载并运行Typing模块
from Typing_Question_Screen import main as typing_entry
typing_entry()
常见踩坑提醒
  • 检查Game模块内部的退出逻辑:如果是tkinter、pygame这类GUI程序,不要在窗口关闭回调里直接写exit()、sys.exit(),只需要销毁当前窗口、跳出主事件循环,让main()函数自然执行完返回即可
  • 不要在Game文件的顶层提前导入Typing_Question_Screen模块,否则会在Game启动的瞬间就加载Typing模块的全部代码,违背顺次运行的需求
  • 如果你用的GUI框架的事件循环是常驻阻塞的,可以在Game流程的退出回调里,设置标记位让主循环正常break,而不是直接终止整个进程

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.02 23:45:03