使用Bash文件运行两个Python脚本

5

我想在我的笔记本电脑上同时运行两个 Python 脚本,而且不会降低它们的计算速度。

我已经搜索过并看到 这个问题 ,建议我们使用 bash 文件。 我搜索过,但是我不明白应该怎么做和如何使用这种叫做 bash 的方式来运行这些脚本。

python script1.py &
python script2.py &

我在IT领域经验不够,需要您的专业建议。 我不明白如何做这件事,去哪里以及如何操作。 我使用的是Windows 64位系统。
祝好!
PS:我查看了答案并标记了它,虽然这是一种同时运行两个任务的方式,但这并不能减少两个并发任务的计算时间。

你的操作系统是什么? - quamrana
@prashantrana 我正在使用Windows。所以只需要在命令提示符中编写 python script1.py&python script2.py&,一切都会正确吗? - Ma Y
@MaY 是的,一次只能执行一个脚本。 - sahasrara62
@prashantrana,我想要同时运行两个进程而不降低速度。 - Ma Y
1
@MaY 是的,它可以做到。我的意思是在终端中运行 python script1.py & 并点击回车键,然后再运行 python script2.py & - sahasrara62
显示剩余4条评论
3个回答

2

I use a batch file which contains these lines:

start python script1.py
start python script2.py

This opens a new window for each start statement.


“使用call python script1.py&不是更好的选择吗?” - sahasrara62
对我没用。这两个脚本是顺序运行的,而不是并发运行的。 - quamrana
我这里有两个问题。第一个是我应该在“命令提示符”上写吗?另一个问题是,我能让它们同时运行吗?我的意思是,如果你只是在 IDL 中打开两个 Python 脚本,你的运行时间会增加。但我不想花更长的时间。这可行吗? - Ma Y
1
你可以自己打开两个命令提示符,一个运行 script1,另一个运行 script2,或者在一个命令提示符中输入上述命令,或使用批处理文件启动它们。 - quamrana
到目前为止还不错。让我完成我用IDLE运行的脚本,我认为它们将在6小时内完成。然后我会运行它。每个脚本持续21小时,当我同时运行它们时,时间是26小时。所以我应该尝试看看是否可能以这种方式获得21小时。 - Ma Y

2
如果您可以在 Git Bash(ref)下安装 GNU Parallel,则可以以以下方式在不同的 CPU 上运行两个脚本:
▶ (cat <<EOF) | parallel --jobs 2
python script1.py
python script2.py
EOF

来自并行人手册的注释:

   --jobs N
       Number of jobslots on each machine. Run up to N jobs in parallel.
       0 means as many as possible. Default is 100% which will run one job per
       CPU on each machine.

请注意,问题已更新以说明并行化不会改善计算时间,这通常是不正确的说法。
虽然并行化的好处高度依赖于机器和工作量,但在多核计算机上,它显着提高了 CPU 密集型进程的处理时间。
以下是一个基于 Spigot 算法(code)计算 50,000 位 Pi 的演示,使用我的四核 MacBook Pro 进行单任务(52秒):
▶ time python3 spigot.py
...
python3 spigot.py 52.73s user 0.32s system 98% cpu 53.857 total

在 GNU 并行计算中运行相同的计算两次(74秒):
▶ (cat <<EOF) | time parallel --jobs 2                                                                                                                                   
python3 spigot.py                                                                                                                                                      
python3 spigot.py                                                                                                                                                      
EOF        
...
parallel --jobs 2  74.19s user 0.48s system 196% cpu 37.923 total

当然,这是在一个繁忙运行操作系统和所有其他应用程序的系统上,所以它并不能将处理时间减半,但仍然是一个很大的改进。
另请参见相关的Stack Overflow答案this

谢谢,我在我的Windows上有Git Bash。我在Git Bash命令窗口中有以下内容: YMa@Yong21-PC MINGW64 ~ $ 所以我应该在$后面写你的代码吗? - Ma Y
什么是 ▶ cat 等等。抱歉问这样的问题。 - Ma Y
我可以问一下您如何在Windows上安装GNU Parallel吗? - Ma Y
不是因为它对我不开放。我之前只有Git Bash。但我不知道如何使用它来安装GNU Plot。 - Ma Y
然后按照这里的说明安装GNU parallel https://dev59.com/da7la4cB1Zd3GeqPd3wn#52451011 - Alex Harvey
显示剩余6条评论

1
一种运行各种并行作业的简单方法是使用nohup。这将输出重定向到名为nohup.out的文件中(默认情况下)。在您的情况下,您只需要写入:
nohup python script1.py > output_script1 &
nohup python script2.py > output_script2 &

使用nohup,您可以注销并且脚本将继续执行,直到它们完成为止。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接