在两个终端运行相同的python代码,它们会相互干扰吗?

Posted

技术标签:

【中文标题】在两个终端运行相同的python代码,它们会相互干扰吗?【英文标题】:Run same python code in two terminals, will them interfere each other? 【发布时间】:2016-04-29 07:39:14 【问题描述】:

我有一个 python 脚本,它需要一段时间才能完成它的执行,具体取决于传递的参数。因此,如果我从两个具有不同参数的终端运行它们,它们会获得自己的代码版本吗?我看不到正在生成两个 .pyc 文件。

1 号航站楼运行:python prog.py 1000 > out_1000.out

在终端 1 上运行的脚本终止之前,我开始运行另一个;因此终端 2 运行:python prog.py 100 > out_100.out

或者基本上我的问题是它们会相互干扰吗?

【问题讨论】:

“互相覆盖”是什么意思? a.out 将被最新运行覆盖,使用 >> 而不是 >python prog.py 在两个终端上都可以正常运行 a.out?我在这里看不到 C。 导入文件时会生成一个.pyc 文件。但通常在它已经运行时再次运行相同的 python 脚本是省事的。对于每个脚本,都会在脚本执行的地方创建一个自己的 python 进程 【参考方案1】:

如果您将输出写入磁盘中的同一文件,那么是的,它将被覆盖。但是,您似乎实际上是在打印到标准输出,然后将其重定向到文件。所以这里不是这样。

现在回答您的问题很简单:同一代码的两次不同执行之间没有交互。当您执行程序或脚本时,操作系统会将代码加载到内存并执行它,随后对代码的更改与已经运行的代码无关。从技术上讲,正在运行的程序称为进程。此外,当您在两个不同的终端上运行代码时,操作系统上会有两个不同的进程,每个进程都有一个进程,除非您明确地这样做(IPC 或进程间通信),否则两个进程无法干扰在这里做。

因此,总而言之,您可以在不同的终端上同时运行您的代码,它们将完全独立。

【讨论】:

+1 喜欢您用基本操作系统、内存/进程管理概念回答问题的方式。谢谢! 很好的解释!【参考方案2】:

每个 Python 解释器进程都是独立的。脚本对自身多次运行的反应取决于所使用的确切代码,但一般它们不应干扰。

【讨论】:

【参考方案3】:
    .pyc 文件参考http://effbot.org/pyfaq/how-do-i-create-a-pyc-file.htm

Python 会自动将您的脚本编译为已编译的代码,即所谓的 字节码,在运行之前。首次导入模块时 时间,或者当源比当前编译的更新时 文件,通常会创建一个包含已编译代码的 .pyc 文件 在与 .py 文件相同的目录中。

    如果您担心您的代码由于任何错误而被覆盖,您应该学会将您的代码置于版本控制之下。注册 github 并使用 git 来执行此操作。

    更大的符号“>”会将输出发送到正确的处理程序。如果您指定文件名,它会将输出推送到该文件名。即使在不同的终端,如果你在同一个文件夹中运行代码,使用“>”指向相同的文件名,“>”右边的文件肯定会被覆盖。

    程序源代码在执行期间不可变。除非你掌握了高级程序黑客技能。

    每个程序都将在其“执行工作区”内运行。除非您编写的代码可以利用相同的资源(例如更改相同的文件,共享资源),否则不会受到干扰。 (除非一个耗尽所有 CPU、内存资源,第二个会受到干扰,但那是另一回事)

【讨论】:

以上是关于在两个终端运行相同的python代码,它们会相互干扰吗?的主要内容,如果未能解决你的问题,请参考以下文章

检查两个节点相互接触时的颜色是不是相同

在运行任务之前杀死终端

程序在pycharm中完美运行,在终端运行时给出错误答案

Visual Studio代码;如何并排打开两个Python shell

在不同的终端运行多个 python 脚本

检查两个 Python 函数是不是相等