重新启动挂起的线程

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