重新启动挂起的线程
Restarting hanging threads
我有一个 运行 的脚本,但它有挂起的倾向。我正在尝试使用线程为 运行 创建另一个脚本,但自动重启功能似乎不起作用。
我想要这个脚本做的是每 900 秒重新启动该函数,或者如果可能的话,在它挂起时重新启动它。
import time
import threading
import os
import functionname
def restart():
time.sleep(900)
os.execl('currentfilepath')
def res():
while True:
try:
# do your works
t = threading.Thread(target=restart, args=(), name='reset')
t.start()
functionname()
except:
print('error')
finally:
print('done')
if __name__ == '__main__':
res()
所以我设法找到了解决这个问题的方法。
import multiprocessing
import time
t=600 # time to wait
def bar():
# do stuff
def barn():
for i in range(t*500): # runs for 500 times
# print ("Tick"+str(i)+'n') # just for tracking progress
time.sleep(1)
if i % t == 0:
print('restarting')
p = multiprocessing.Process(target=bar)
p.terminate
p = multiprocessing.Process(target=bar)
p.start()
if __name__ == '__main__':
p = multiprocessing.Process(target=bar)
p.start()
p1 = multiprocessing.Process(target=barn)
p1.start()
可能不是最优雅的,但是嘿,它有效。
您的回答有效,但似乎是一次性的;在我的系统上,它在 1 次后停止 运行。我更改了代码以改用 while 循环;现在它在我的系统上运行:
def barn():
p = multiprocessing.Process(target=bar)
p.start()
i = 0
while(t > i):
print("running for " + str(i))
i += 1
time.sleep(1)
if i == t:
print('restarting')
p = multiprocessing.Process(target=bar)
p.terminate
p = multiprocessing.Process(target=bar)
p.start()
i = 0
我有一个 运行 的脚本,但它有挂起的倾向。我正在尝试使用线程为 运行 创建另一个脚本,但自动重启功能似乎不起作用。
我想要这个脚本做的是每 900 秒重新启动该函数,或者如果可能的话,在它挂起时重新启动它。
import time
import threading
import os
import functionname
def restart():
time.sleep(900)
os.execl('currentfilepath')
def res():
while True:
try:
# do your works
t = threading.Thread(target=restart, args=(), name='reset')
t.start()
functionname()
except:
print('error')
finally:
print('done')
if __name__ == '__main__':
res()
所以我设法找到了解决这个问题的方法。
import multiprocessing
import time
t=600 # time to wait
def bar():
# do stuff
def barn():
for i in range(t*500): # runs for 500 times
# print ("Tick"+str(i)+'n') # just for tracking progress
time.sleep(1)
if i % t == 0:
print('restarting')
p = multiprocessing.Process(target=bar)
p.terminate
p = multiprocessing.Process(target=bar)
p.start()
if __name__ == '__main__':
p = multiprocessing.Process(target=bar)
p.start()
p1 = multiprocessing.Process(target=barn)
p1.start()
可能不是最优雅的,但是嘿,它有效。
您的回答有效,但似乎是一次性的;在我的系统上,它在 1 次后停止 运行。我更改了代码以改用 while 循环;现在它在我的系统上运行:
def barn():
p = multiprocessing.Process(target=bar)
p.start()
i = 0
while(t > i):
print("running for " + str(i))
i += 1
time.sleep(1)
if i == t:
print('restarting')
p = multiprocessing.Process(target=bar)
p.terminate
p = multiprocessing.Process(target=bar)
p.start()
i = 0