我有这段代码:
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
?
答案 0 :(得分:1)
您可以在实例化Thread对象之前通过isAlive
检查来防止这种情况。拼写将根据版本而有所不同。 Relevant doc here
答案 1 :(得分:1)
您为什么要重新启动线程?由于构造函数将获得worker参数,因此这是唯一可以在该线程上运行的东西。如果您想要做的是触发目标处理另一条信息或者再次运行该作业,您可以:
a)构建另一个线程并运行它(我不知道内存有多贵)
b)让你的目标获得对Queue对象的引用,并将处理信息传递给主线程。
如果你试图找到类似于java runnables或callables的东西我不认为python提供这样的构造