Python创建的线程数比预期的多2倍
发布时间:2020-12-20 12:28:55 所属栏目:Python 来源:网络整理
导读:我是 Python的新手,所以如果这是显而易见的话我会道歉. 我正在尝试构建多线程应用程序,但是当我想创建一个线程时,我得到两个而不是一个. MyThread.py from threading import Threadimport timeclass MyThreadClass(Thread): def __init__(self): Thread.__in
我是
Python的新手,所以如果这是显而易见的话我会道歉.
我正在尝试构建多线程应用程序,但是当我想创建一个线程时,我得到两个而不是一个. MyThread.py from threading import Thread import time class MyThreadClass(Thread): def __init__(self): Thread.__init__(self) def run(self): print "starting " + self.getName() + "n" from main import var1 while True: print self.getName() + " is runningn" print "value: " + var1 + "n" time.sleep(1) main.py from MyThread import MyThreadClass var1 = "Test" MyThreadClass().start() 我得到的输出 Thread-1 is running Thread-2 is running Thread-1 is running Thread-2 is running Thread-1 is running Thread-2 is running ..... 为什么会这样?我注意到如果我用MyThreadClass()替换MyThreadClass().start().run()我得到2个线程,但只有一个继续运行 Thread-1 is running Thread-2 is running Thread-2 is running Thread-2 is running Thread-2 is running ..... 知道代码有什么问题吗? 解决方法
在MyThread.py中导入main.py时,该行
再次执行(因为模块被加载),因此启动第二个线程. 您可以在main.py中使用替换该行来创建一个保护子句 if __name__ == "__main__": MyThreadClass().run() 或者更好,只需将var1传递给MyThreadClass作为参数,以避免循环依赖. MyThread.py: from threading import Thread import time class MyThreadClass(Thread): def __init__(self,var1): Thread.__init__(self) self.var1 = var1 def run(self): print "starting " + self.getName() + "n" while True: print self.getName() + " is runningn" print "value: " + self.var1 + "n" time.sleep(1) main.py from MyThread import MyThreadClass if __name__ == "__main__": MyThreadClass("Test").run() (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |