Nat*_*anD 3 python multithreading
我是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 running\n"
print "value: " + var1 + "\n"
time.sleep(1)
Run Code Online (Sandbox Code Playgroud)
main.py
from MyThread import MyThreadClass
var1 = "Test"
MyThreadClass().start()
Run Code Online (Sandbox Code Playgroud)
我得到的输出
Thread-1 is running
Thread-2 is running
Thread-1 is running
Thread-2 is running
Thread-1 is running
Thread-2 is running
.....
Run Code Online (Sandbox Code Playgroud)
为什么会这样?我注意到,如果我替换MyThreadClass().start(),MyThreadClass().run()我得到2个线程,但只有一个继续运行
Thread-1 is running
Thread-2 is running
Thread-2 is running
Thread-2 is running
Thread-2 is running
.....
Run Code Online (Sandbox Code Playgroud)
知道代码有什么问题吗?
当您导入main.py时MyThread.py,该行
MyThreadClass().开始()
再次执行(因为模块被加载),因此启动第二个线程.
您可以main.py通过替换该行来创建一个保护子句
if __name__ == "__main__":
MyThreadClass().run()
Run Code Online (Sandbox Code Playgroud)
或者更好,只需传递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 running\n"
print "value: " + self.var1 + "\n"
time.sleep(1)
Run Code Online (Sandbox Code Playgroud)
main.py
from MyThread import MyThreadClass
if __name__ == "__main__":
MyThreadClass("Test").run()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2066 次 |
| 最近记录: |