Skip to main content
 首页 » 编程设计

python之如何确保只有一个线程实例在 Python 中运行

2025年05月04日11wayfarer

我有一个包含三个线程的程序。我这样调用它们:

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) 

但不知何故,它对我来说似乎不是一个干净的解决方案,因为程序可能由于某种原因退出并且线程可能根本无法启动。

请您参考如下方法:

确保线程只运行一次的一种方法是正确的,每个线程都带有一个锁文件。

有另一种方法可以检查它们是否正在运行,而不是不断尝试运行它们。 通过使用以下代码

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')