重新启动挂起线程

时间:2019-09-09 17:04:53

标签: python multithreading restart

我有一个正在运行的脚本,但是有挂起的趋势。我正在尝试制作另一个脚本来使用线程运行它,但是自动重启功能似乎不起作用。

我希望此脚本执行的操作是每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()

2 个答案:

答案 0 :(得分:0)

所以我设法找到一种解决方法。

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 :(得分:0)

您的回答有效,但似乎是一次性的;在我的系统上,它在 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