Python多进程避坑-线程创建后自动启动并进入阻塞模式

Python多进程避坑-线程创建后自动启动并进入阻塞模式

  • 1.配置环境
  • 2.问题描述
  • 3.问题解决
  • 4.问题分析
  • 5.参考文献
  • 6.结束语

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
Python多进程避坑-线程创建后自动启动并进入阻塞模式_第1张图片

3.问题解决

这里线程创建的 时候指定错误了函数,正确的指代函数方法是去掉括号
可以对比一下这两个代码的不同之处

task1 = Thread(target=Main.work2())
task2 = Thread(target=Main.work2)

正确创建线程的方法应该是第二行

task2 = Thread(target=Main.work2)

4.问题分析

之所以会产生这样的问题,是因为在使用pycharm作为IDE创建线程时,会自动提示补全括号,这在编程中需要注意去掉
Python多进程避坑-线程创建后自动启动并进入阻塞模式_第2张图片

5.参考文献

  • https://blog.csdn.net/csdnsevenn/article/details/106754391

6.结束语

如果本文对你有帮助的话还请点赞、收藏一键带走哦,你的支持是我最大的动力!(づ。◕ᴗᴗ◕。)づ
在这里插入图片描述

你可能感兴趣的:(Python,python,多线程,阻塞)