python的多线程原来可以这样解

 更新时间:2022年01月09日 17:06:58   作者:lijin111222  
这篇文章主要为大家介绍了python的多线程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助

多线程

多线程类似于同时执行多个不同程序,多线程运行有如下优点:

使用线程可以把占据长时间的程序中的任务放到后台去处理。
用户界面可以更加吸引人,比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度。
程序的运行速度可能加快。
在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了。在这种情况下我们可以释放一些珍贵的资源如内存占用等等。

创建线程

一个进程里面必然有一个主线程。

创建线程的两种方法
继承Thread类,并重写它的run()方法
import threading
import time
cLass MyThread(threading.Thread):
	def__ init__ (seLf, n):
		super (MyThread, seLf).__ init__()
		self.n = n
	def run(self):
		print('以类的方式创建多线程',self.n)
		time.sleep(3)
r1 = MyThread(1)
r2 = MyThread(2)
r1.start()
r2.start()
调用threading库的Thread类
import threading
import time
def test(x):
    print(x)
    time.sleep(2)
if __name__=='__main__':
    t1 = threading.Thread(target=test, args=(1,))  
    t2 = threading.Thread(target=test, args=(2,))
    t1.start()
    t2.start()

守护线程此类线程的特点是,当程序中主线程及所有非守护线程执行结束时,未执行完毕的守护线程也会随之消亡(进行死亡状态),程序将结束运行。

#守护线程
import threading
import time
def run(n):
    print('task',n)
    time.sleep(1)
    print('3s')
    time.sleep(1)
    print('2s')
    time.sleep(1)
    print('1s')
if __name__ == '__main__': #主线程
    t=threading.Thread(target=run,args=('t1',))
    t.setDaemon(True) #设置子线程为守护线程,守护主线程。主线程结束,子线程也立马结束。必须在start() 方法调用之前设置
    t.start()
    print('end')

线程锁

1.互斥锁

#互斥锁
import threading
def run():
    global x
    lock.acquire() #申请锁
    x+=1 
    lock.release() #释放锁
if __name__=='__main__':
    x=0
    res=[]
    lock=threading.Lock() #实例化线程锁
    for i in range(100): #100个线程
        t=threading.Thread(target=run) 
        t.start()
        res.append(t)
    for t in res:
        t.join()    
    print(x) 
2.递归锁

import threading
def func(lock):
    global gl_num
    lock.acquire()
    gl_num += 1
    time.sleep(1)
    print(gl_num)
    lock.release()
if __name__ == '__main__':
    gl_num = 0
    lock = threading.RLock()
    for i in range(10):
       t = threading.Thread(target=func,args=(lock,))
       t.start()

练手:

import threading
import time  #导入时间模块

#线程一:输出当前的年月日时分秒
class myThread1(threading.Thread):
    def run(self):
        while (True):
            print(time.asctime(time.localtime(time.time())))#输出实时时间
            time.sleep(1)
#线程二:name每2秒打印输出4次结束
class myThread2(threading.Thread):#继承threading.Thread
    def __init__(self,name):#继承父类的方法实现继承threading.Thread       
        super(myThread2, self).__init__()#super方法调用父类
        self.name=name #实例化对象属性    
    def run(self):#重写Thread类中的run方法
        for i in range(4):#for循环打印4次
            print(self.name)          
            time.sleep(2)#打印一次delay两秒
if __name__ == '__main__':
    #创建线程1和线程2并传入参数
    x1 = myThread1()
    x2 = myThread2("张三")
    #开启线程
    x1.start()
    x2.start()

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!

相关文章

  • Python语法def语句及复杂用法实例探究

    Python语法def语句及复杂用法实例探究

    在 Python 中,def 是用于定义函数的关键字,本文将深入介绍def的用法和特点,详细说明如何定义函数、传递参数、返回值以及更复杂的用法
    2024-01-01
  • 浅谈openpyxl库,遇到批量合并单元格的问题

    浅谈openpyxl库,遇到批量合并单元格的问题

    这篇文章主要介绍了浅谈openpyxl库,遇到批量合并单元格的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • Pytest接口自动化测试框架搭建模板

    Pytest接口自动化测试框架搭建模板

    这篇文章主要介绍了Pytest接口自动化测试框架搭建模板,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • 完美解决Python matplotlib绘图时汉字显示不正常的问题

    完美解决Python matplotlib绘图时汉字显示不正常的问题

    今天小编就为大家分享一篇完美解决Python matplotlib绘图时汉字显示不正常的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • python打包多类型文件的操作方法

    python打包多类型文件的操作方法

    这篇文章主要介绍了python打包多类型文件的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • Python中方法链的使用方法

    Python中方法链的使用方法

    这篇文章主要为大家详细介绍了Python中方法链的使用方法,方法链(method chaining)是面向对象的编程语言中的一种常见语法,对方法链感兴趣的小伙伴们可以参考一下
    2016-02-02
  • python删除字符串中指定字符的方法

    python删除字符串中指定字符的方法

    这篇文章主要介绍了python删除字符串中指定字符的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08
  • Python使用pyecharts控件绘制图表

    Python使用pyecharts控件绘制图表

    这篇文章介绍了Python使用pyecharts控件绘制图表的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • Keras目标检测mtcnn facenet搭建人脸识别平台

    Keras目标检测mtcnn facenet搭建人脸识别平台

    这篇文章主要为大家介绍了Keras目标检测mtcnn facenet搭建人脸识别平台,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • 浅谈python类属性的访问、设置和删除方法

    浅谈python类属性的访问、设置和删除方法

    下面小编就为大家带来一篇浅谈python类属性的访问、设置和删除方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-07-07

最新评论