我的Python应用程序中有几个守护程序线程。当我的main函数退出时,这些守护程序线程终止(按预期)并且程序关闭。但我想要一种基本上“重新启动”我的程序而不退出并重新启动它的方法。有没有办法“强制关闭”我的所有守护程序线程而不调用sys.exit()?
答案 0 :(得分:2)
主要取决于您的需求。如果要保存相同类型并重新加载 应用程序自动这不是很难,拿走 以下示例:
#!/usr/bin/env python
import sys, os, time
t = int(sys.argv[1])
print 'hello, I am', t
time.sleep(t)
if t > 2:
sys.exit()
os.execl(sys.argv[0], sys.argv[0], str(t+1))
脚本在满足某个条件时重新启动,然后
存在。您可以根据事件或a重新启动应用程序
信号,例如在SIGHUP
之后。
如果您还需要保存当前状态,事情就更多了 复杂。您可以先将应用程序的状态保存在文件中 重新启动它并在启动例程期间重新加载状态或您 必须指示守护程序线程在某些条件下退出:
import threading, signal, time
should_restart = False
cond = threading.Event()
exit = threading.Event()
threads = []
def start(num=3):
for i in range(num):
t = threading.Thread(target=foo, args=[cond])
threads.append(t)
t.daemon = True
print 'hello, I am', t.name
t.start()
def restart(signum, frame):
global should_restart
should_restart = False
cond.set()
for thread in threads:
thread.join()
print 'bye bye', thread.name
cond.clear()
start()
def foo(should_exit):
while not should_exit.is_set():
time.sleep(0.2)
signal.signal(signal.SIGHUP, restart)
signal.signal(signal.SIGINT, lambda n, f: exit.set())
start()
while not exit.is_set():
time.sleep(0.2)
我希望这两个例子对您有用,以便更好地了解您的需求。