python的多线程原来可以这样解
作者:lijin111222 发布时间:2021-02-22 16:12:18
标签: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()
来源:https://blog.csdn.net/lijin111222/article/details/122388381


猜你喜欢
- 1. 实验说明问题要求:针对静态单赋值(SSA)形式的函数中间代码输入,输出函数返回值的范围实现思路: 基本根据 2013年在CGO会议上提
- 引言目前Python2和Python3存在版本上的不兼容性,这里将列举dict中的问题之一。下面话不多说,来看看详细的介绍:1. Pytho
- 本文实例讲述了Python实现清理微信僵尸粉功能。分享给大家供大家参考,具体如下:原理通过Pyhton调用itchat模块登录网页版微信,给
- 本文实例讲述了Python MongoDB 插入数据时已存在则不执行,不存在则插入的解决方法。分享给大家供大家参考,具体如下:前言:想把QQ
- 本文实例讲述了django框架实现模板中获取request 的各种信息。分享给大家供大家参考,具体如下:在做网页程序时,request,re
- 学习网络爬虫难免遇到使用代理的情况,下面介绍一下如何使用requests设置代理:如果需要使用代理,你可以通过为任意请求方法提供 proxi
- 前言这次,我们要用Pygame写一个Pong游戏先看看效果:需要的模块:Pygame在python文件同目录下新建resources文件夹,
- 写在最前面:我在研究机器学习的过程中,给的数据集是手写数字图片被处理后的由0,1表达的txt文件,今天写一写关于图片转化为二进制txt文件的
- 本程序调用百度OCR API对剪贴板的图片文字识别,配合CaptureScreen软件,可快速识别文字。#!python3import ur
- 本文实例讲述了python通过装饰器检查函数参数数据类型的方法。分享给大家供大家参考。具体分析如下:这段代码定义了一个python装饰器,通
- 前言很多时候需要对自己模型进行性能评估,对于一些理论上面的知识我想基本不用说明太多,关于校验模型准确度的指标主要有混淆矩阵、准确率、精确率、
- Javascript 中将多个语句写成一个语句的两种方法小结一、使用逗号运算符将多个语句写成一个语句 1.一次声明多个变量&nb
- 首先要扩展自带的auth_user表我就放个图吧,同时setting中应该设置:# 此处重载是为了使UserProfile生效AUTH_US
- 格式化是通过格式操作使任意类型的数据转换成一个字符串。例如下面这样<script>console.log(chopper.for
- 这篇文章主要介绍了mysql数据迁徙方法工具解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以
- 首先有一段以下结构体的定义type User struct {UserName stringUserId int `name:
- 概念django自带一套信号机制来帮助我们在框架的不同位置之间传递信息。也就是说,当某一事件发生时,信号系统可以允许一个或多个发送者(sen
- 描述Python time time()返回当前时间的时间戳(1970 * 后经过的浮点秒数)。突然想看时间了,打开cmd发现脑中空荡,Jav
- 在CSS中我们会经常要用到“清除浮动”Clear,比较典型的就是clear:both;CSS手册上是这样说明的:该属性的值指出了不允许有浮动
- 1.Airbus Ship Detection Challengeurl: https://www.kaggle.com/comp