1.配置环境
使用环境:python3.8
平台:Windows10、Ubuntu20.04
IDE:PyCharm
2.问题描述
Python在创建多线程时线程创建后自动启动并进入阻塞模式
代码如下
from threading import Thread
import time
class Main():
def work1(self):
print(time.ctime(), "work1")
def work2(self):
i = 0
while i < 5:
print(time.ctime(), "work2")
i += 1
time.sleep(0.5)
def loop(self):
while True:
pass
if __name__ == '__main__':
Main = Main()
# 错误创建线程,此线程一创建并开始执行,并且主进程处于阻塞模式
task1 = Thread(target=Main.work2())
print("*")
task1.setDaemon(True)
task1.start()
# 正确创建线程
task2 = Thread(target=Main.work2)
print("*")
task2.setDaemon(True)
task2.start()
Main.loop()
运行时可以发现task1使用
task1 = Thread(target=Main.work2())
创建时,边立即进入线程并执行,并且主进程会产生阻塞,直至task1线程结束
通过debug可以发现这个现象,程序还没进行到task1.start()
便执行了task1
3.问题解决
这里线程创建的 时候指定错误了函数,正确的指代函数方法是去掉括号
可以对比一下这两个代码的不同之处
task1 = Thread(target=Main.work2())
task2 = Thread(target=Main.work2)
正确创建线程的方法应该是第二行
task2 = Thread(target=Main.work2)
4.问题分析
之所以会产生这样的问题,是因为在使用pycharm作为IDE创建线程时,会自动提示补全括号,这在编程中需要注意去掉
5.参考文献
6.结束语
如果本文对你有帮助的话还请点赞、收藏一键带走哦,你的支持是我最大的动力!(づ。◕ᴗᴗ◕。)づ