【问题标题】:Python calling script without waiting for it to executePython调用脚本而不等待它执行
【发布时间】:2018-01-14 18:12:24
【问题描述】:

我想知道是否有任何方法可以调用 python 脚本并在不同的线程中完全启动该程序,这样主程序(调用者)就不必等到被调用的脚本完成执行。到目前为止,我已经尝试过 subprocess 和 os.system 但这两个都滞后,直到脚本完成执行。

main.py

os.system('"F:\second.py"')
//continue the rest of the code without waiting for second.py to finish

second.py

//do stuff

【问题讨论】:

标签: python multithreading python-3.x python-multiprocessing python-multithreading


【解决方案1】:

你可以试试subprocess

first.py

import subprocess
subprocess.Popen(["python.exe", "second.py"])
print "done"

second.py

import time
for i in range(10):
    print i
    time.sleep(10)

编辑:

如果您想完全分离第一个和第二个脚本,请添加一个标志

first.py

import subprocess
subprocess.Popen(["python.exe", "second.py"], creationflags=subprocess.CREATE_NEW_CONSOLE)
print "done"

【讨论】:

  • subprocess.Popen 等待second.py 完成,这不是我要找的:/
  • 对我有用(windows/python 2.7)。如果需要,您还可以添加一个标志并在单独的窗口中打开子流程(请参阅我在答案中的编辑)
  • 有效,你知道怎么用这个方法给second.py传递额外的参数吗?
  • 只需将它们作为单独的字符串添加到第一个参数列表中 ["python.exe", "second.py", "param1", "param2"]
【解决方案2】:

如果您在 Unix 机器上,您可以使用 os.fork() 创建一个单独的进程,即使父进程完成后该进程仍将继续运行。例如:

ma​​in.py

import os

pid = os.fork()
if pid == 0: # pid is only equal to 0 in the child process
    os.system('python second.py')

second.py

import time

time.sleep(2)
print("I'm a child process!")

【讨论】:

    猜你喜欢
    • 2019-09-16
    • 1970-01-01
    • 2017-10-11
    • 1970-01-01
    • 2011-11-15
    • 1970-01-01
    • 1970-01-01
    • 2012-06-26
    • 2021-03-08
    相关资源
    最近更新 更多