是否可以重新启动线程?

时间:2014-06-17 08:32:40

标签: python multithreading

我有这段代码:

def runner1():
    os.system('python something.py')
..... and so on
thread_run_1 = threading.Thread(target=runner1, args=[])
....
i =0 
j = 0
while i < 2: # i want to run continuously, dont want to use cron jobs 
    print "while 1"
    #i made it simpler, but here are a lot of checks
    while j == 0:
        print "while 2"
        thread_run_1.start()
        ......
        time.sleep(3600)
        break
    print "back to while 1"
    i+=1
    print i

可以避免此错误:RuntimeError: threads can only be started once

2 个答案:

答案 0 :(得分:1)

您可以在实例化Thread对象之前通过isAlive检查来防止这种情况。拼写将根据版本而有所不同。 Relevant doc here

答案 1 :(得分:1)

您为什么要重新启动线程?由于构造函数将获得worker参数,因此这是唯一可以在该线程上运行的东西。如果您想要做的是触发目标处理另一条信息或者再次运行该作业,您可以:

a)构建另一个线程并运行它(我不知道内存有多贵)

b)让你的目标获得对Queue对象的引用,并将处理信息传递给主线程。

如果你试图找到类似于java runnables或callables的东西我不认为python提供这样的构造