我有一个包含三个线程的程序。我称之为:
if __name__ == "__main__":
while True:
try:
t1().start()
except:
log.debug('Trouble with t1 synchronizer')
try:
t2().start()
except:
log.debug('Trouble with t2 synchronizer')
try:
t3().start()
except:
log.debug('Trouble with t3 synchronizer')
我想让这3个线程一直运行。但我也想确保每次只运行t1,t2和t3中的一个实例。
修改
我能想到的唯一解决方案是在每个线程中都有锁文件。像
这样的东西if os.path.exists(lockfile):
EXIT THREAD
f=open(lockfile,'w')
f.write('lock')
f.close()
THREAD_STUFF
os.remove(lockfile)
但不知怎的,它对我来说看起来不是一个干净的解决方案,因为程序可能已经退出,因为某些原因并且线程可能根本不会启动。
答案 0 :(得分:0)
你是正确的一种方法,以确保线程只运行一次,每个线程都有一个锁文件。
有多少方法可以检查它们是否正在运行而不是不断尝试运行它们。 使用以下代码
if __name__ == "__main__":
try:
t1().start()
except:
log.debug('Trouble with t1 synchronizer')
try:
t2().start()
except:
log.debug('Trouble with t2 synchronizer')
try:
t3().start()
except:
log.debug('Trouble with t3 synchronizer')
Time.sleep(5)
# this sleep allows the threads to start so they will return a True for isAlive()
while True:
try:
if t1().isAlive()==False:
try:
t1().start()
except:
log.debug('Trouble with t1 synchronizer')
if t2.isAlive()==False:
try:
t2().start()
except:
log.debug('Trouble with t2 synchronizer')
if t2.isAlive()==False()
try:
t3().start()
except:
log.debug('Trouble with t3 synchronizer')