田小花语音机器人(三)使用python的threading类建立基础多线程程序

本来是想用thread来着,结果在开始导入thread模块的时候就掉坑了
好气哦,ubuntu 环境下打开pycharm搜索这个模块竟然找不到!!!
于是我换源,参考这篇博客:https://blog.csdn.net/IAMoldpan/article/details/78544598
结果还是不行T_T
我输了,去找答案,于是乎网上说python3里面已经把thread取代了…

Python 为啥不建议使用 thread模块?

于是换成threading

threading有比thread更好的线程管理和解决方法

搜索pythreading,直接成功,废了我一个小时时间 ×_× 55555

教程参考大神的文章:

Python多线程编程(一):threading 模块 Thread 类的用法详解

python:threading.Thread类的使用详解

下面是我学习的代码,实现了如下功能:

1、建立了两个子线程
2、主线程和子线程分别按照时间顺序打印数字i,得到三组不同输出
3、使用time类获得延时操作
4、使用相关线程方法使得主线程和线程2必须在线程1执行结束以后才执行

代码如下:

#!/usr/bin/python
#encoding:utf-8
#
import time
import threading

def function():
    for i in range(5):
        print(threading.current_thread().name, i) #通过 thread.current_thread() 方法可以返回线程本身,然后就可以访问它的 name 属性。
        time.sleep(0.5)
#
thread_1 = threading.Thread(target=function,name='子线程1') #建立子线程
thread_2 = threading.Thread(target=function,name='子线程2') #建立子线程
"""
thread = threading.Thread(target=test,name='TestThread',daemon=True)
daemon 的值为 True设置为MainThread 结束,子线程也立马结束
"""
#
thread_1.start()#线程开始执行
thread_1.join()#阻塞其他线程的执行直到执行完成当前的线程
thread_2.start()
#
"""可以通过 Thread 的 is_alive() 方法查询线程是否还在运行。"""
"""主线程"""
for i in range(5):
    print('主线程的值: ', i)
    time.sleep(0.5)

创建子线程的方法:

class threading.Thread(group=None, target=None, name=None, args=(), kwargs={}, *, daemon=None)

最重要的参数是 target,所以我们需要将一个 callable 对象赋值给它,线程才能正常运行。如果要让一个 Thread 对象启动,调用它的 start() 方法就好了。

如果在构造方法中没有个 name 赋值的话,默认就是 “Thread-N” 的形式,N 是数字。
通过 thread.current_thread() 方法可以返回线程本身,然后就可以访问它的 name 属性。

Thread 的构造方法中有一个 daemon 参数。默认是 None。子线程 中 daemon 属性默认是 False,这使得 主线程 需要等待它的结束,自身才结束。

在实际操作的项目里往往需要把代码段包装成类,这里需要对thread类里面的run()方法进行重写,因为建立一个子线程的对象后需要调用start()方法来执行类。而star()方法会直接执行类里面的run方法。

在建立了一个线程对象后需要继承thread方法,同时重写run方法:

class TestThread(threading.Thread):

		def __init__(self,name=None):#主方法
        		threading.Thread.__init__(self,name=name)#继承thread类
        		
        def run(self):#对应star方法
		        for i in range(5):
		            print(threading.current_thread().name + ' test ', i)
		            time.sleep(1)

thread = TestThread(name='TestThread')#实例化类的对象
thread.start()

至于线程之间数据共享的问题,东西有点复杂,慢慢来,下一篇见

233333333333

田小花语音机器人(三)使用python的threading类建立基础多线程程序田小花语音机器人(三)使用python的threading类建立基础多线程程序 田小花 发布了8 篇原创文章 · 获赞 11 · 访问量 1062 私信 关注
上一篇:Python学习笔记--threading线程


下一篇:C#中Mutex的用法