创建"单例"线程 - 如何在任何时候最多拥有一个线程实例

GP8*_*P89 2 python singleton multithreading

我希望有一个类(从threading.Thread继承)初始化并从程序中的多个位置开始.我想要避免的是,如果线程已经从其他地方运行,如果程序中的另一个地方试图启动它

t= somemodule.TheThread(some,args)
t.start()
Run Code Online (Sandbox Code Playgroud)

程序可以继续执行(但是只有当相同的线程尚未在此处或其他地方运行时,线程才会启动).

我可以想到一些不太优雅的方法来设置标志,但必须有一个很好的方法来解决这个问题.我用装饰器查看单例类型模式或覆盖新的但主要问题是如果我保持相同的实例是你不能(我知道)调用启动不止一次,即使线程已经完成.

我想过在anther对象中创建线程对象,可以检查当前线程是否仍在运行,但是我无法确定如何保持这个线程安全.

有人有任何想法吗?

Ned*_*der 6

您应该使用函数来创建和启动线程,该函数可以使用自己的簿记来了解线程是否已经启动.不要忘记使簿记线程安全!

试图让调用者相信他正在创建和创建一个线程,当他可能不是时,就会比它的价值更麻烦.在任何情况下,将此常见操作封装在函数中都是一个好主意,并为您提供所需的控件.