【问题标题】:Running two python scripts with bash file使用 bash 文件运行两个 python 脚本
【发布时间】:2019-02-28 11:29:17
【问题描述】:

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

我搜索并看到this question 说我们应该使用bash 文件。 我已经搜索过,但我不明白我应该做什么以及如何使用这种称为bash 的方式运行这些脚本。

python script1.py &
python script2.py &

我对此缺乏经验,需要您的专业建议。 我不明白如何做到这一点,在哪里以及如何做到这一点。 我使用的是 Windows 64 位。

最好的

PS: The answer I checked the mark is a way to run in parallel two tasks, but it does not decrease the calculation time for two parallel tasks at all.

【问题讨论】:

  • 你的操作系统是什么?
  • 打开一个终端并运行命令python script1.py &python script2.py &(基于ubuntu /linux的系统)您将能够运行脚本而不会影响其他性能
  • @quamrana 窗口
  • @prashantrana 我正在使用 Windows。所以只需要在命令提示符下写python script1.py & python script2.py &?一切都会正确吗?
  • @MaY 是的,它会做到的,我的意思是运行 python script1.py & 点击回车然后在终端运行 python script2.py &

标签: python windows bash


【解决方案1】:

运行各种并行作业的一种非常简单的方法是使用 nohup。这会将输出重定向到一个名为 nohup.out 的文件(默认情况下)。在您的情况下,您应该只写:

nohup python script1.py > output_script1 &
nohup python script2.py > output_script2 &

就是这样。使用 nohup 您也可以注销,脚本将继续执行,直到完成

【讨论】:

    【解决方案2】:

    如果您可以在 Windows 上的 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 密集型进程的处理时间。

    这是一个基于在我的四核 MacBook Pro 上使用 Spigot 算法 (code) 计算 50,000 位 Pi 的演示:

    单个任务(52s):

    ▶ time python3 spigot.py
    ...
    python3 spigot.py 52.73s user 0.32s system 98% cpu 53.857 total
    

    在 GNU 并行 (74s) 中运行相同的计算两次:

    ▶ (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
    

    当然,这是在一个忙于运行操作系统和我所有其他应用程序的系统上,因此它不会将处理时间减半,但它仍然是一个很大的改进。

    另请参阅this 相关 Stack Overflow 答案。

    【讨论】:

    • 谢谢,我的窗口上有 git-bash。我在 git bash 命令窗口 YMa@Yong21-PC MINGW64 ~ $ 中有这个,所以我应该在 $ 之后编写你的代码吗?
    • 什么是▶ cat 等等。抱歉这样的问题。
    • 请问如何在windoes上安装gnu parallel?
    • ▶ 是我的提示。忽略那个。安装 Git Bash,然后完全按照您在我的答案中看到的内容输入所有内容,使用 ▶ 字符。至于安装 Git Bash,你有没有按照相关 Stack Overflow 问题的链接进行操作?
    • 不,因为它不为我打开。我之前刚吃过 git bash。但我不知道如何使用它来安装 gnu plot
    【解决方案3】:

    我使用包含以下行的批处理文件:

    start python script1.py
    start python script2.py
    

    这将为每个 start 语句打开一个新窗口。

    【讨论】:

    • call python script1.py &amp; 不是更好的选择
    • 对我不起作用。这两个脚本按顺序运行,而不是同时运行。
    • 我有两个问题。我应该把它写在command prompt 上吗?另一个同时运行它们?我的意思是如果你只用 IDL 打开两个 Python 脚本,你的运行时间将会增加。但我不想有更长的时间。有可能吗?
    • 您可以自己打开两个命令提示符并在一个命令提示符中运行script1,在另一个命令提示符中运行script2,或者,在一个命令提示符中键入上述行,或使用批处理文件来启动它们。
    • 到目前为止一切顺利。让我完成我用 IDLE 运行它们的脚本,我认为它们将在 6 小时内完成。然后我会运行它。它们每个持续 21 小时,当我同时运行它们时,时间是 26 小时。所以我应该试着看看用这种方式是否有可能有 21 小时。
    猜你喜欢
    • 2015-07-05
    • 2018-03-14
    • 2021-11-30
    • 1970-01-01
    • 2011-05-09
    • 2017-12-12
    • 2022-01-05
    • 2017-01-11
    • 1970-01-01
    相关资源
    最近更新 更多