【问题标题】:concurrently run multiple python scripts without creating multiple scripts在不创建多个脚本的情况下同时运行多个 python 脚本
【发布时间】:2019-02-02 18:41:58
【问题描述】:

我希望我能很好地解释这一点..(英语不是我的第一语言)但在this 问题中,他们要求同时运行多个 python 脚本。 this is 我现在到底是怎么做的,基本上只是在 bash 中用 & 执行我的多个脚本

我想要做的是避免创建多个脚本,并且想要一个可以同时运行所有脚本的脚本

上的脚本看起来像这样(类似于我所有的其他脚本)

while True:
    text = "some shell script"
    os.system(text)

我发现很难使用 while 循环或任何类型的循环,因为它一个接一个地执行它们,而且速度非常慢。我对python很不熟悉,也不擅长编程..所以任何帮助都会很棒

【问题讨论】:

  • 您使用的代词过多。 “他问”、“做”、“多个”、“我的全部”……我不在你的脑海里,我不知道这些词指的是什么。
  • 我了解,已尝试修复,希望现在更易于理解:D
  • while 循环中的os.system(text &) 怎么样? (或text = "some shell script &" 后跟os.system(text)
  • 据我了解,您希望尽可能多地执行一些脚本,对吗?首先,您应该尝试了解自己要解决什么样的问题。例如,如果您想避免等待,或者您需要所有核心来解决问题。 This article here 介绍了线程和多处理之间的区别,这可能会有所帮助。
  • 不清楚您要做什么。您是否有多个脚本(作为多个 .py 文件)?您是从 bash 还是其他 python 脚本运行它们?您链接的问题是关于从 bash 运行它们,您的代码片段正在尝试从 python 运行一些子进程。您应该发布一个最小的工作示例,否则我们只是在猜测您在这里尝试做什么。

标签: python linux bash shell scripting


【解决方案1】:

您可以使用os.fork() 为每个脚本生成一个新进程。即

text = "some shell script"
pid = os.fork()
if pid == 0
    os.system(text)
    sys.exit()

这将创建一个新进程并在其中执行脚本,然后在完成后退出。尽管在while循环中这样做只会继续创建新进程,直到操作系统停止它。

如果您有要执行的程序列表,最好使用 for 循环对其进行迭代。例如

programs = ['test1.py', 'test2.py', 'test3.py']
for program in programs:
    pid = os.fork()
    if pid == 0
        os.system(program)
        sys.exit()

我还建议在 os.system() 上使用 subprocess.call(),因为它是为了替换它而编写的。它允许您轻松处理正在执行的程序的输入和输出。

【讨论】:

  • 嗨,感谢您的回答,如果我理解正确,那将一遍又一遍地执行完全相同的 shell 脚本。有没有办法稍微操纵“一些shell脚本”,比如有一些细微的变化?
  • 感谢您的回答!但是您是否认为有一种方法可以将我的所有脚本“合并”为一个,而不是拥有许多脚本?像一个while循环,它可以适应每次迭代需要循环的脚本的一些更改?再一次,非常感谢!
猜你喜欢
  • 2021-06-06
  • 1970-01-01
  • 2021-07-01
  • 2017-06-23
  • 2020-02-19
  • 1970-01-01
相关资源
最近更新 更多