广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python中的多线程怎么实现
  • 405
分享到

Python中的多线程怎么实现

2023-07-02 11:07:10 405人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

本文小编为大家详细介绍“python中的多线程怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python中的多线程怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。前言:多线程简单理解就是:一个CP

本文小编为大家详细介绍“python中的多线程怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python中的多线程怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

前言:

多线程简单理解就是:一个CPU,也就是单核,将时间切成一片一片的,CPU轮转着去处理一件一件的事情,到了规定的时间片就处理下一件事情。

1.python中显示当前线程信息的属性和方法

coding:utf-8# 导入threading包import threadingif __name__ == "__main__":    print("当前活跃线程的数量", threading.active_count())    print("将当前所有线程的具体信息展示出来", threading.enumerate())    print("当前的线程的信息展示", threading.current_thread())

效果图:

Python中的多线程怎么实现

2.添加一个线程

# coding:utf-8import threadingimport timedef job1():    # 让这个线程多执行几秒    time.sleep(5)    print("the number of T1 is %s" % threading.current_thread())if __name__ == "__main__":    # 创建一个新的线程    new_thread = threading.Thread(target=job1, name="T1")    # 启动新线程    new_thread.start()    print("当前线程数量为", threading.active_count())    print("所有线程的具体信息", threading.enumerate())    print("当前线程具体信息", threading.current_thread())

效果图:

Python中的多线程怎么实现

3.线程中的join函数

(1)预想的是,执行完线程1,然后输出All done…“理想很丰满,现实却不是这样的”

# coding:utf-8import threadingimport timedef job1():    print("T1 start")    for i in range(5):        time.sleep(1)        print(i)    print("T1 finish")def main():    # 新创建一个线程    new_thread = threading.Thread(target=job1, name="T1")    # 启动新线程    new_thread.start()    print("All done...")if __name__ == "__main__":    main()

效果图:

Python中的多线程怎么实现

(2)为了达到我们的预期,我们使用join函数,将T1线程进行阻塞。join函数进行阻塞是什么意思?就是哪个线程使用了join函数,当这个线程正在执行时,在他之后的线程程序不能执行,得等这个被阻塞的线程全部执行完毕之后,方可执行!

# coding:utf-8import threadingimport timedef job1():    print("T1 start")    for i in range(5):        time.sleep(1)        print(i)    print("T1 finish")def main():    # 新创建一个线程    new_thread = threading.Thread(target=job1, name="T1")    # 启动新线程    new_thread.start()    # 阻塞这个T1线程    new_thread.join()    print("All done...")if __name__ == "__main__":    main()

效果图:

Python中的多线程怎么实现

4.使用Queue存储线程的结果

线程的执行结果,无法通过return进行返回,使用Queue存储。

# coding:utf-8import threadingfrom queue import Queue"""    Queue的使用"""def job(l, q):    for i in range(len(l)):        l[i] = l[i] ** 2    q.put(l)def multithreading():    # 创建队列    q = Queue()    # 线程列表    threads = []    # 二维列表    data = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [6, 6, 6]]    for i in range(4):        t = threading.Thread(target=job, args=(data[i], q))        t.start()        threads.append(t)    # 对所有线程进行阻塞    for thread in threads:        thread.join()    results = []    # 将新队列中的每个元素挨个放到结果列表中    for _ in range(4):        results.append(q.get())    print(results)if __name__ == "__main__":    multithreading()

效果图:

Python中的多线程怎么实现

5.线程lock

当同时启动多个线程时,各个线程之间会互相抢占计算资源,会造成程序混乱。

举个栗子:

当我们在选课系统选课时,当前篮球课还有2个名额,我们三个人去选课。

选课顺序为stu1 stu2 stu3,应该依次打印他们三个的选课过程,但是现实情况却是:

# coding:utf-8import threadingimport timedef stu1():    print("stu1开始选课")    global course    if course > 0:        course -= 1        time.sleep(2)        print("stu1选课成功,现在篮球课所剩名额为%d" % course)    else:        time.sleep(2)        print("stu1选课失败,篮球课名额为0,请选择其他课程")def stu2():    print("stu2开始选课")    global course    if course > 0:        course -= 1        time.sleep(2)        print("stu2选课成功,现在篮球课所剩名额为%d" % course)    else:        time.sleep(2)        print("stu2选课失败,篮球课名额为0,请选择其他课程")def stu3():    print("stu3开始选课")    global course    if course > 0:        course -= 1        time.sleep(2)        print("stu3选课成功")        print("篮球课所剩名额为%d" %course)    else:        time.sleep(2)        print("stu3选课失败,篮球课名额为0,请选择其他课程")if __name__ == "__main__":    # 篮球课名额    course = 2    T1 = threading.Thread(target=stu1, name="T1")    T2 = threading.Thread(target=stu2, name="T2")    T3 = threading.Thread(target=stu3, name="T3")    T1.start()    T2.start()    T3.start()

效果图:

Python中的多线程怎么实现

为了解决这种情况,我们使用lock线程同步锁,在线程并发执行时,保证每个线程执行的原子性。有效防止了共享统一数据时,线程并发执行的混乱。

改进的代码如下:

# coding:utf-8import threadingimport timedef stu1():    global lock    lock.acquire()    print("stu1开始选课")    global course    if course > 0:        course -= 1        time.sleep(2)        print("stu1选课成功,现在篮球课所剩名额为%d" % course)    else:        time.sleep(2)        print("stu1选课失败,篮球课名额为0,请选择其他课程")    lock.release()def stu2():    global lock    lock.acquire()    print("stu2开始选课")    global course    if course > 0:        course -= 1        print("stu2选课成功,现在篮球课所剩名额为%d" % course)    else:        time.sleep(1)        print("stu2选课失败,篮球课名额为0,请选择其他课程")    lock.release()def stu3():    global lock    lock.acquire()    print("stu3开始选课")    global course    if course > 0:        course -= 1        time.sleep(1)        print("stu3选课成功,现在篮球课所剩名额为%d" % course)    else:        time.sleep(1)        print("stu3选课失败,篮球课名额为0,请选择其他课程")    lock.release()if __name__ == "__main__":    # 篮球课名额    course = 2    # 创建同步锁    lock = threading.Lock()    T1 = threading.Thread(target=stu1, name="T1")    T2 = threading.Thread(target=stu2, name="T2")    T3 = threading.Thread(target=stu3, name="T3")    T1.start()    T2.start()    T3.start()

效果图:

Python中的多线程怎么实现

读到这里,这篇“Python中的多线程怎么实现”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网Python频道。

--结束END--

本文标题: Python中的多线程怎么实现

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

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python中的多线程怎么实现
    本文小编为大家详细介绍“Python中的多线程怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python中的多线程怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。前言:多线程简单理解就是:一个CP...
    99+
    2023-07-02
  • python怎么实现多线程
    这篇文章将为大家详细讲解有关python怎么实现多线程,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Python的优点有哪些1、简单易用,与C/C++、Java、C# 等传统语言相比,Python对代码格...
    99+
    2023-06-14
  • Python中怎样实现多线程
    今天就跟大家聊聊有关Python中怎样实现多线程,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。线程简介多线程能让你像运行一个独立的程序一样运行一段长代码。这有点像调用子进程(subp...
    99+
    2023-06-16
  • python多线程及多线程有序性怎么实现
    这篇文章主要介绍了python多线程及多线程有序性怎么实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇python多线程及多线程有序性怎么实现文章都会有所收获,下面我们一起来看看吧。前言多线程一般用于同时调用...
    99+
    2023-07-02
  • Python怎么实现selenium多线程爬虫
    要在Python中实现Selenium多线程爬虫,你可以按照以下步骤进行操作: 导入必要的库: from selenium im...
    99+
    2023-10-24
    Python selenium
  • python thread模块怎么实现多线程
    这篇文章主要介绍“python thread模块怎么实现多线程”,在日常操作中,相信很多人在python thread模块怎么实现多线程问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”python thread...
    99+
    2023-06-30
  • Python进阶之多线程怎么实现
    这篇文章主要介绍“Python进阶之多线程怎么实现”,在日常操作中,相信很多人在Python进阶之多线程怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python进阶之多线程怎么实现”的疑惑有所帮助!...
    99+
    2023-07-06
  • Nodejs中怎么实现多线程
    Nodejs中怎么实现多线程,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1 背景需求中有以下场景1 对称解密、非对称解密2 压缩、解压3...
    99+
    2022-10-19
  • Node.js中怎么实现多线程
    Node.js中怎么实现多线程,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Node.js 是如何工作的Node.js 使用两种线程:ev...
    99+
    2022-10-19
  • VB.NET中怎么实现多线程
    本篇文章为大家展示了VB.NET中怎么实现多线程,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。VB.NET(Visual Basic.NET)是为适应Microsoft .NET框架的需要,对Vis...
    99+
    2023-06-17
  • Java中多线程怎么实现
    这篇文章主要讲解了“Java中多线程怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java中多线程怎么实现”吧!线程是一些可以并行的,独立的执行的代码.之前我编的程序都只能做一件事情...
    99+
    2023-06-03
  • HTML5中怎么实现多线程
    这篇文章将为大家详细讲解有关HTML5中怎么实现多线程,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一、明确 JavaScript 是单线程JavaScript 语言的一大特点就是单线程,也...
    99+
    2023-06-09
  • Python怎么实现多线程的事件监控
    这篇文章主要介绍“Python怎么实现多线程的事件监控”,在日常操作中,相信很多人在Python怎么实现多线程的事件监控问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python怎么实现多线程的事件监控”的疑...
    99+
    2023-06-15
  • 多线程python的实现及多线程有序性
    目录前言一、多线程运行无序问题二、“join方法”解决多线程运行无序问题三、threading.Thread()的常用参数总结前言 多线程一般用于同时调用多个...
    99+
    2022-11-11
  • Node.js 中怎么实现多线程和多进程
    这期内容当中小编将会给大家带来有关Node.js 中怎么实现多线程和多进程,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。为什么要用 NodeJSJavaScript 最初...
    99+
    2022-10-19
  • python多线程数据交互怎么实现
    在Python中,可以使用多线程模块threading来实现多线程数据交互。以下是一个简单的示例: import threading...
    99+
    2023-10-22
    python
  • python多线程数据共享怎么实现
    在Python中,可以使用`threading`模块来实现多线程数据共享。具体步骤如下: 导入`threading`模块:`im...
    99+
    2023-10-26
    python
  • python多线程共享变量怎么实现
    在Python中,可以使用`threading`模块来实现多线程共享变量。 下面是一个简单的例子,展示了如何使用多线程共享变量: i...
    99+
    2023-10-27
    python
  • python怎么实现多线程并发抓取
    这篇文章主要为大家展示了“python怎么实现多线程并发抓取”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“python怎么实现多线程并发抓取”这篇文章吧。多线程并发抓取单线程太慢的话,就需要多线...
    99+
    2023-06-26
  • Python中怎么实现线程编程
    Python中怎么实现线程编程,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1、调用thread模块中的start_new_thread()函数来产生新的线程,请看代码:p...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作