Python线程问题
我正在尝试制作一个程序来实现这一点:Python线程问题,python,multithreading,Python,Multithreading,我正在尝试制作一个程序来实现这一点: 在线程中调用程序1 在另一个线程中调用程序2 如果程序1先结束,则终止程序2,反之亦然 我已经尝试了很长时间,这是我目前的问题: 我无法导入线程模块(不是线程!) 函数还是类,这是个问题 我已经知道如何使用subprocess.Popen调用进程,以及如何使用命令行函数终止它们。我还知道如何获取PID 这是我的实际代码: import threading, subprocess, shlex class Prog1(threading.Thread):
import threading, subprocess, shlex
class Prog1(threading.Thread):
def __init__(self, arg=''):
self.arg = arg
threading.Thread.__init__(self)
def run(self):
p = subprocess.Popen(shelx.split(self.arg))
global p.pid
subprocess.Popen(shelx.split("kill -9 " + q.pid))
class Prog2(threading.Thread):
def __init__(self, arg=''):
self.arg = arg
threading.Thread.__init__(self)
def run(self):
q = subprocess.Popen(shelx.split(self.arg))
global q.pid
subprocess.Popen(shelx.split("kill -9 " + p.pid))
关于python 2.7
import thread
然后
对我有用,不知道杀了他们,但从你的问题来看,这就是你一直坚持的
从@J.F.Sebastian收到反馈后,我开始研究新的(旧的)线程模块,并修复我以前的代码和我目前正在处理的代码
import threading
t=threading.Thread(target=fuct, args=(param1, param2...)).start()
我不知道这是否是使用它的最可靠的方法,但我只知道它存在了25分钟:)要杀死所有进程,如果其中任何进程已退出,您可以在单独的线程中调用每个进程,并使用它来发信号通知任何进程是否已结束:
#!/usr/bin/env python
import shlex
import subprocess
import threading
def kill_all(processes):
for p in processes:
try:
if p.poll() is None:
p.kill() # note: it may leave orphans
p.wait()
except: # pylint: disable=W0702
pass # ignore whatever it is (including SIGINT)
def wait(process, exit_event):
try:
process.wait()
finally:
exit_event.set() # signal the process has exited
def main():
# start processes
cmd = "/bin/bash -c 'echo start {0}; sleep {0}; echo done {0}'".format
processes = []
for i in range(1, 3):
try:
processes.append(subprocess.Popen(shlex.split(cmd(i))))
except EnvironmentError:
kill_all(processes) # failed to start some process; kill'em all
return 1 # error
# wait until at least one process finishes
exit_event = threading.Event()
for p in processes:
threading.Thread(target=wait, args=(p, exit_event)).start()
exit_event.wait()
kill_all(processes)
if __name__ == "__main__":
import sys
sys.exit(main())
输出
欢迎来到这个网站!我们很想帮助您,但如果没有更多关于您尝试过的内容的信息,以及您被困的确切位置,这是不可能的。向我们展示你的代码会有所帮助。试着编一个简单的例子来再现你的问题。
线程
模块是.@J.F.Sebastian新标准是什么?我并没有过多地关注最新情况,只是在遇到问题时用谷歌搜索,看看有什么效果。
#!/usr/bin/env python
import shlex
import subprocess
import threading
def kill_all(processes):
for p in processes:
try:
if p.poll() is None:
p.kill() # note: it may leave orphans
p.wait()
except: # pylint: disable=W0702
pass # ignore whatever it is (including SIGINT)
def wait(process, exit_event):
try:
process.wait()
finally:
exit_event.set() # signal the process has exited
def main():
# start processes
cmd = "/bin/bash -c 'echo start {0}; sleep {0}; echo done {0}'".format
processes = []
for i in range(1, 3):
try:
processes.append(subprocess.Popen(shlex.split(cmd(i))))
except EnvironmentError:
kill_all(processes) # failed to start some process; kill'em all
return 1 # error
# wait until at least one process finishes
exit_event = threading.Event()
for p in processes:
threading.Thread(target=wait, args=(p, exit_event)).start()
exit_event.wait()
kill_all(processes)
if __name__ == "__main__":
import sys
sys.exit(main())
start 1
start 2
done 1