加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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时,该行

MyThreadClass().start()

再次执行(因为模块被加载),因此启动第二个线程.

您可以在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()

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读