在Google Colab GPU环境下如何同时运行两个Python脚本?
在Google Colab中同时运行两个Python脚本的可行方案
我懂你在Colab里想用GPU同时跑两个脚本做持续评估的需求,之前用!python script1.py & !python script2.py &没生效很正常——Colab的命令行环境在处理后台任务时有不少特殊限制,直接用&很容易因为会话上下文或者输出缓冲的问题导致进程悄悄终止。下面给你几个靠谱的解决办法:
方案1:用nohup后台运行并记录日志
这是最稳妥的基础方案,能避免进程因为会话断开或输出问题挂掉:
# 启动第一个脚本,输出重定向到script1.log !nohup python script1.py > script1.log 2>&1 & # 启动第二个脚本,输出重定向到script2.log !nohup python script2.py > script2.log 2>&1 &
nohup的作用是让进程忽略挂起信号,就算你暂时断开Colab的网页,脚本也能继续在后台跑> script1.log 2>&1会把脚本的标准输出和错误输出都写到日志文件里,之后你可以用!cat script1.log查看运行情况
方案2:用tmux创建独立会话(适合需要随时查看进程状态)
如果需要随时查看脚本的实时输出,或者管理后台进程,tmux是个好工具。先安装tmux:
!apt-get install -y tmux
然后分别为两个脚本创建独立的后台会话:
# 创建名为session1的后台会话,运行script1 !tmux new-session -d -s session1 'python script1.py' # 创建名为session2的后台会话,运行script2 !tmux new-session -d -s session2 'python script2.py'
- 想看某个脚本的实时输出,就执行
!tmux attach-session -t session1(按Ctrl+B再按D可以回到Colab命令行,不会终止会话) - 不想打开会话的话,也可以用
!tmux capture-pane -p -t session1直接抓取当前输出内容
方案3:用Python启动器脚本(灵活可控)
写一个简单的Python脚本作为启动器,用subprocess模块同时启动两个子进程,还能在Python里监控进程状态:
先创建start_scripts.py文件:
import subprocess import threading def run_script(script_name): # 启动脚本并捕获输出 proc = subprocess.Popen( ['python', script_name], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True ) # 实时打印输出 for line in proc.stdout: print(f"[{script_name}] {line}", end='') proc.wait() # 分别启动两个脚本的线程 threading.Thread(target=run_script, args=("script1.py",)).start() threading.Thread(target=run_script, args=("script2.py",)).start()
然后运行这个启动器:
!python start_scripts.py
这个方案的好处是你可以在启动器里添加更多逻辑,比如监控进程是否崩溃、自动重启,或者自定义输出格式。
额外提醒
Colab的GPU是单卡资源,两个脚本会共享GPU显存,记得确保你的脚本没有硬编码独占全部显存的设置(比如PyTorch里的torch.cuda.set_per_process_memory_fraction(0.5)可以限制每个进程用一半显存,避免OOM)。
内容的提问来源于stack exchange,提问作者Huyen
相关产品推荐
相关产品推荐

