返回顶部
首页 > 资讯 > 后端开发 > Python >python的多线程原来可以这样解
  • 100
分享到

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

2024-04-02 19:04:59 100人浏览 八月长安

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()

总结

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

--结束END--

本文标题: python的多线程原来可以这样解

本文链接: https://lsjlt.com/news/161982.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • python的多线程原来可以这样解
    目录多线程创建线程总结多线程 多线程类似于同时执行多个不同程序,多线程运行有如下优点: 使用线程可以把占据长时间的程序中的任务放到后台去处理。用户界面可以更加吸引人,比如用户点击了一...
    99+
    2024-04-02
  • 原来Java接口多实现还可以这样玩
    目录前言示例枚举实现接口定义实现常规多实现(调用示例)业务场景接口定义实现应用总结前言 多继承的目的是为了提高子类的功能,扩展性得到了提高。 为了扩充子类的功能,java改良成多实现...
    99+
    2024-04-02
  • C语言指针原来也可以这样了解
    目录什么是指针指针的应用指针 ± 整数指针 + 指针指针 - 指针野指针野指针成因指针和数组指针 ± 和数组的关系二级指针总结什么是指针 指针是应该对象,可以直接指向电脑存储器中的某...
    99+
    2024-04-02
  • Python实现京东茅台抢购脚本, 原来这样就可以了?
    京东茅台抢购脚本可以分为以下几部分,具体实现步骤如下: 登录京东账号 首先需要登录京东账号。一个简单的方式是使用Python的 selenium 库。在使用 selenium 库前,需要安装 sele...
    99+
    2023-09-09
    python 开发语言 爬虫
  • 你知道Tab Bar图标原来还可以这样玩吗
    示例代码下载 (本地下载) 背景 框架自带的 Tab Bar 相信大家已经熟悉得不能再熟悉了,一般使用的时候不过是设置两个图标代表选中和未选中两种状态,难免有一些平淡。...
    99+
    2022-05-29
    tab bar 图标
  • Python的索引与切片原来该这样理解
    目录1. 普通索引:取一个元素1.1 正索引1.2 负索引2 切片索引:取多个元素2.1 切片索引中[0]可以省略不写:2.2 切片索引中最后一位可以不写:2.3 列表、元组和字符串...
    99+
    2024-04-02
  • vue的插槽原来该这样理解
    目录一、认识插槽Slot二、插槽的基本使用三、插槽的默认内容四、多个插槽实现的效果五、动态插槽六、具名插槽的缩写七、渲染作用域八、作用域插槽的案例九、独占默认插槽缩写十、默认插槽和具...
    99+
    2024-04-02
  • CMS CI/CD的艺术,原来可以这么酷炫!
    CMS CI/CD的必要性 随着内容管理系统(CMS)变得越来越复杂,其开发和部署过程也变得更加繁琐。为了应对这些挑战,CMS CI/CD(持续集成和持续部署)应运而生。CMS CI/CD是一种自动化和集成的开发和部署过程,可以帮助开发...
    99+
    2024-02-25
    CMS CI/CD DevOps 自动化 持续集成 持续部署
  • 哦?原来Python 面试题是这样的,P
    本面试题题库,由公号:非本科程序员 整理发布 第1题:是否遇到过python的模块间循环引用的问题,如何避免它 这是代码结构设计的问题,模块依赖和类依赖 如果老是觉得碰到循环引用可能的原因有几点: 可能是模块的分界线划错地方了 可能...
    99+
    2023-01-31
    是这样 面试题 Python
  • 原来微信被删除后仍可以继续聊天,只要这样简单操作就可以了
    微信做为大家最常用的一种社交工具,对于一些常用功能大家肯定都有所了解,但是大家最不喜微信的一处功能就是会在不接受任何通知时,被微信好友删除。 那么如果被微信好友删除后,如何才能继续聊天呢?这是很多微信用户都...
    99+
    2024-04-02
  • C语言的数组与指针可以这样了解
    目录前言一、数组的定义二、数组空间的初始化1. char数组赋值2.char数组硬件开发规范二、数组与指针总结前言 自学笔记,没有历史知识铺垫(省略百度部分)C语言数组的概念及使用 ...
    99+
    2024-04-02
  • Python多线程以及多线程中join()的使用方法
    本篇内容主要讲解“Python多线程以及多线程中join()的使用方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python多线程以及多线程中join()的使用方法”吧!Python多线程与...
    99+
    2023-06-20
  • java多线程Synchronized实现可见性原理解析
    Synchronized实现可见性原理 可见性 要实现共享变量的可见性,必须保证两点: 线程修改后的共享变量值能够及时从工作内存刷新到主内存中 其他线程能够及时把共...
    99+
    2024-04-02
  • Python多线程以及多线程中join()的使用方法示例
    Python多线程与多进程中join()方法的效果是相同的。 下面仅以多线程为例: 首先需要明确几个概念: 知识点一: 当一个进程启动之后,会默认产生一个主线程,因为线程是程序执行流...
    99+
    2024-04-02
  • 颠覆你对 CMS 防御 XSS 攻击的认知,原来可以这么简单!
    让我们来探索一下 CMS 防御 XSS 攻击的有效解决方案,让你惊讶地发现原来防御 XSS 攻击可以如此简单。 一、理解 XSS 攻击 跨站脚本攻击(XSS)是一种常见的 web 攻击,攻击者利用网站的漏洞,在用户浏览器中执行恶意脚本,...
    99+
    2024-02-13
    CMS XSS 过滤 正则表达式 安全
  • Python学习教程:不再造假数据了,可以来试试Faker这个库
    今天分享这篇Python学习教程绝对是干货,Faker这个库的强大,由你说了算!在做程序开发的时候,我们经常会用到一些测试数据,相信大多数同学是这么来造测试数据的:test1test01test02测试1测试2测试数据1这是一段测试文本这是...
    99+
    2023-06-02
  • 详解Python中的多线程
    目录什么是多线程:threading模块守护线程与join方法线程锁(互斥锁Mutex)GIL VS LockRLock(递归锁)Semaphore(信号量)Event(事件)生产者...
    99+
    2024-04-02
  • Python GIL 的福音:拥抱多线程的未来
    ...
    99+
    2024-04-02
  • Python GIL 的终结者:解锁多线程的无限可能
    ...
    99+
    2024-04-02
  • 怎样用一个开源工具实现多线程 Python 程序的可视化
    今天就跟大家聊聊有关怎样用一个开源工具实现多线程 Python 程序的可视化,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。VizTracer 可以跟踪并发的 Python 程序,以帮...
    99+
    2023-06-15
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作