本来是想用thread来着,结果在开始导入thread模块的时候就掉坑了
好气哦,ubuntu 环境下打开pycharm搜索这个模块竟然找不到!!!
于是我换源,参考这篇博客:https://blog.csdn.net/IAMoldpan/article/details/78544598
结果还是不行T_T
我输了,去找答案,于是乎网上说python3里面已经把thread取代了…
于是换成threading
threading有比thread更好的线程管理和解决方法
搜索pythreading,直接成功,废了我一个小时时间 ×_× 55555
教程参考大神的文章:
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
田小花 发布了8 篇原创文章 · 获赞 11 · 访问量 1062 私信 关注