范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

Python多线程教程

  在这个 Python 多线程教程中,您将看到创建线程的不同方法,并学习实现线程安全操作的同步。这篇文章的每个部分都包含一个示例和示例代码,以逐步解释该概念。
  顺便说一下,多线程是几乎所有高级编程语言都支持的软件编程的核心概念。因此,您应该知道的第一件事是:什么是线程以及多线程在计算机科学中意味着什么。什么是计算机科学中的线程?
  在软件编程中,线程是具有独立指令集的最小执行单元。它是进程的一部分,并在共享程序的可运行资源(如内存)的相同上下文中运行。一个线程有一个起点、一个执行顺序和一个结果。它有一个指令指针,用于保存线程的当前状态并控制接下来按什么顺序执行。什么是计算机科学中的多线程?
  一个进程并行执行多个线程的能力称为多线程。理想情况下,多线程可以显着提高任何程序的性能。而且 Python 多线程机制非常人性化,您可以快速学习。多线程的优点多线程可以显着提高多处理器或多核系统的计算速度,因为每个处理器或核同时处理一个单独的线程。多线程允许程序在一个线程等待输入时保持响应,同时另一个线程运行 GUI。此陈述适用于多处理器或单处理器系统。进程的所有线程都可以访问其全局变量。如果一个全局变量在一个线程中发生变化,那么它对其他线程也是可见的。线程也可以有自己的局部变量。多线程的缺点在单处理器系统上,多线程不会影响计算速度。由于管理线程的开销,性能可能会下降。访问共享资源时需要同步以防止互斥。它直接导致更多的内存和 CPU 利用率。多线程增加了程序的复杂性,从而也使得调试变得困难。它增加了潜在死锁的可能性。当线程无法定期访问共享资源时,它可能会导致饥饿。应用程序将无法恢复其工作。
  到目前为止,您已经阅读了有关线程的理论概念。如果您不熟悉 Python,我们建议您阅读我们的 30 个快速 Python 编码技巧,它们也可以帮助您编写 Python 多线程代码。我们的许多读者都使用了这些技巧,并且能够提高他们的编码技能。Python 多线程模块
  Python 提供了两个模块来在程序中实现线程。** **模块和**<线程> **模块。
  注意:供您参考,Python 2.x 曾经有 < thread> 模块。但它在 Python 3.x 中被弃用并重命名为 < _thread> 模块以实现向后兼容性。
  两个模块的主要区别在于模块<_线程>将线程实现为函数。另一方面,< threading >模块提供了一种面向对象的方法来启用线程创建。如何使用线程模块创建线程?
  如果你决定在你的程序中应用< thread > 模块,那么使用下面的方法来产生线程。#语法  thread.start_new_thread ( function, args[, kwargs] ) 复制代码
  这种方法对于创建线程非常有效和直接。您可以使用它在 Linux 和 Windows 中运行程序。
  此方法启动一个新线程并返回其标识符。它将使用传递的参数列表调用指定为"函数"参数的函数。当 < function > 返回时,线程将静默退出。
  这里,args是一个参数元组;使用空元组调用 < function > 不带任何参数。可选的 < kwargs > 参数指定关键字参数的字典。
  **如果 < function > 因未处理的异常而终止,则会打印堆栈跟踪,然后线程退出(它不会影响其他线程,它们会继续运行)。使用以下代码了解有关线程的更多信息。基本的 Python 多线程示例#Python 多线程示例。 #1. 使用递归计算阶乘。 #2. 使用线程调用阶乘函数。  from _thread import start_new_thread from time import sleep  threadId = 1 #线程计数器 waiting = 2 #2秒等待的时间  def factorial(n):     global threadId     rc = 0          if n < 1:   # base case         print("{}: {}".format(" Thread", threadId ))         threadId += 1         rc = 1     else:         returnNumber = n * factorial( n - 1 )  # recursive call         print("{} != {}".format(str(n), str(returnNumber)))         rc = returnNumber          return rc  start_new_thread(factorial, (5, )) start_new_thread(factorial, (4, ))  print("Waiting for threads to return...") sleep(waiting) 复制代码
  您可以在本地 Python 终端中运行上述代码,也可以使用任何在线 Python 终端。执行此程序后,它将产生以下输出。
  程序输出# Python 多线程:程序输出- 等待线程返回...  Thread: 1 1 != 1 2 != 2 3 != 6 4 != 24 5 != 120  Thread: 2 1 != 1 2 != 2 3 != 6 4 != 24 复制代码如何使用线程模块创建线程?
  最新的< threading >模块比上一节讨论的遗留< thread >模块提供了丰富的特性和更好的线程支持。< threading > 模块是 Python 多线程的一个很好的例子。
  < threading > 模块结合了 < thread > 模块的所有方法,并暴露了一些额外的方法threading.activeCount(): 它找到总数。活动线程对象。threading.currentThread(): 您可以使用它来确定调用方线程控制中的线程对象数量。threading.enumerate(): 它将为您提供当前活动的线程对象的完整列表。
  除了上述方法,< threading >模块还提供了< Thread >类,你可以尝试实现线程。它是 Python 多线程的面向对象的变体。
  < Thread > 类发布以下方法。
  类方法
  方法说明
  run():
  它是任何线程的入口点函数。
  start():
  start() 方法在 run 方法被调用时触发一个线程。
  join([time]):
  join() 方法使程序能够等待线程终止。
  isAlive():
  isAlive() 方法验证活动线程。
  getName():
  getName() 方法检索线程的名称。
  setName():
  setName() 方法更新线程的名称。使用线程模块实现线程的步骤
  您可以按照以下步骤使用 < threading > 模块实现一个新线程。从 < Thread > 类构造一个子类。覆盖 < init(self [,args]) > 方法以根据要求提供参数。接下来,重写< run(self [,args]) > 方法来编写线程的业务逻辑。
  一旦定义了新的 < Thread> 子类,就必须实例化它以启动一个新线程。然后,调用 < start()> 方法来启动它。它最终会调用< run()> 方法来执行业务逻辑。示例 – 创建一个线程类来打印日期#Python 多线程示例打印当前日期。 #1. 使用 threading.Thread 类定义子类。 #2. 实例化子类并触发线程。  import threading import datetime  class myThread (threading.Thread):     def __init__(self, name, counter):         threading.Thread.__init__(self)         self.threadID = counter         self.name = name         self.counter = counter     def run(self):         print(" Starting " + self.name)         print_date(self.name, self.counter)         print("Exiting " + self.name)  def print_date(threadName, counter):     datefields = []     today = datetime.date.today()     datefields.append(today)     print("{}[{}]: {}".format( threadName, counter, datefields[0] ))  # 创建新线程 thread1 = myThread("Thread", 1) thread2 = myThread("Thread", 2)  # 启动新线程 thread1.start() thread2.start()  thread1.join() thread2.join() print(" Exiting the Program!!!") 复制代码
  程序输出Starting Thread Thread[1]: 2021-07-22 Exiting Thread  Starting Thread Thread[2]: 2021-07-22 Exiting Thread  Exiting the Program!!! 复制代码Python 多线程——同步线程
  < threading > 模块具有实现锁定的内置功能,允许您同步线程。需要锁定来控制对共享资源的访问,以防止损坏或丢失数据。
  您可以调用 Lock() 方法来应用锁,它返回新的锁对象。然后,您可以调用锁对象的获取(阻塞) 方法来强制线程同步运行。
  可选的阻塞参数指定线程是否等待获取锁。Case Blocking = 0:如果获取锁失败,线程将立即返回零值,如果锁成功则返回一。Case Blocking = 1:线程阻塞并等待锁被释放。
  锁对象的release() 方法用于在不再需要时释放锁。
  仅供参考,Python 的内置数据结构(例如列表、字典)是线程安全的,因为它具有用于操作它们的原子字节码的副作用。在 Python 中实现的其他数据结构或基本类型(如整数和浮点数)没有这种保护。为了防止同时访问一个对象,我们使用了一个Lock 对象。锁定的多线程示例#Python 多线程示例来演示锁定。 #1. 使用 threading.Thread 类定义子类。 #2. 实例化子类并触发线程。 #3. 在线程的 run 方法中实现锁。  import threading import datetime  exitFlag = 0  class myThread (threading.Thread):     def __init__(self, name, counter):         threading.Thread.__init__(self)         self.threadID = counter         self.name = name         self.counter = counter     def run(self):         print(" Starting " + self.name)         # 获取锁同步线程         threadLock.acquire()         print_date(self.name, self.counter)         # 为下一个线程释放锁         threadLock.release()         print("Exiting " + self.name)  def print_date(threadName, counter):     datefields = []     today = datetime.date.today()     datefields.append(today)     print("{}[{}]: {}".format( threadName, counter, datefields[0] ))  threadLock = threading.Lock() threads = []  # 创建新线程 thread1 = myThread("Thread", 1) thread2 = myThread("Thread", 2)  # 启动新线程 thread1.start() thread2.start()  # 添加线程到线程列表 threads.append(thread1) threads.append(thread2)  # 等待所有线程完成 for thread in threads:     thread.join()  print(" Exiting the Program!!!") 复制代码
  程序输出Starting Thread Thread[1]: 2021-07-22 Exiting Thread  Starting Thread Thread[2]: 2021-07-22 Exiting Thread  Exiting the Program!!!

中国拥有了属于自己的手机系统鸿蒙终于来了,在干呼万唤之后,不再犹抱琵琶,而是大大方方地来到了大家的眼前。在今天来看,关于鸿蒙的讨论和消息已经够多,反而有些习以为常,但若是以两年前甚至是一年前的眼光来看,我只能应对短信和电话骚扰腾讯建议增加人机验证北京商报讯(记者魏蔚)26元能呼出5000次,针对手机用户收到的通讯轰炸,6月2日腾讯守护者计划安全团队向企业提供了几点建议,包括对被黑产利用的验证码接口增加人机验证针对移动端打造第四大民营运营商联通新合作伙伴!平价4G产品中的战斗机中国移动,联通,电信三家运营商,想必大家都很熟悉,每个人自从购买手机之后,都少不了要和这三家打招呼。中国移动凭借出道早的优势,是目前最大的运营商,但是另外两家这两年发展也非常迅速。比特币下跌尚未结束比特币价格在经历过去十年来最糟糕的5月之后,短期内或会继续下跌。机构需求减弱可能会使比特币价格跌至30000美元以下,比特币将需要跌至26000美元才会发出散户投降的信号,此后才将HarmonyOS初现独领风骚这一篇全面报告开启华为新序章万物皆HarmonOS互联皆在瞬息之间序言它无所不在,你看不见它,它往返于表达与聆听之间,传递信息,它能承载万物的语言。它是声音,沟通万物。它无所不在,你看不见它,它存在于万物之中2599元起,华为Watch3发布,搭载HarmonyOS6月2日,华为WATCH3系列今日登场,由于搭载了HarmonyOS,华为WATCH3成为一款腕上独立终端。外观上,华为WATCH3首次加入3D旋转表冠,配有大曲率3D玻璃屏幕,高香港上市腾讯控股17年暴涨1228倍,互联网红利A股股民能否共享?我是腾讯的小股东。目前持有腾讯控股2万多股。我是08年陆续买入的,持有至今。算起来,十一年过去了,算上分红什么的,我翻了大约30倍有的。很感谢腾讯,让我衣食无忧。当年为什么买入腾讯别黑小米11了,科学证明5G手机都会烫小米11烫手骁龙888不好这个运行搞得不能打游戏的消息真的是满天飞,但是科学证明这真的跟小米新的骁龙888一点关系都没有。去年就有学者研究发表论文2020年中国智能手机散热器件行业OPPO员工诋毁鸿蒙后发文不仅伤害了华为,也影响了公司!正式从OPPO离职三言财经5月29日消息,日前辱骂诋毁鸿蒙系统的OPPO员工于昨日在微博发文宣布,正式结束其在OPPO的工作。文中称其没有依据,仅凭一些所谓网络文章和挑动,就否定了鸿蒙价值,不仅伤害因制造传播不实信息,6家中国媒体和公司向特斯拉公开致歉和讯汽车综合。近期,特斯拉在中国市场负面消息频繁,但其中不乏一些虚假类内容消息。对此,特斯拉方面于昨晚就部分不实消息进行澄清,并附有6家中国媒体(自媒体)和公司的道歉信。5月28日传说中的MIUI精简版,从小米音乐开始?从MIUI12。5正式推送之前,就有不少数码爱好者甚至知名博主猜测,MIUI13主打的方向将会是精简冗余代码提升稳定性和流畅度,甚至还将大幅减少广告。呐,如果这是真的,那就是件普天
给两轮电动市场施压,五菱让雅迪爱玛很紧张?展览公益行演艺促销两轮电动市场度过了激烈的2021,而在虎年来临之际,各品牌又以一种紧张的气氛开启跨年拼杀!雅迪的全明星阵容新日的战略峰会,似乎是对去年的总销量抱有不满。不过这只是3月份新能源车涨价榜单发布,ModelY涨3万,看看出乎意料的都有谁在这即将过去的3月份,除了蔚来汽车,基本所有新能源厂家都有不同次数不同幅度的涨价。我们选择几款有代表性的车型来看看涨价情况。ModelY涨价次数最多,涨幅最大。第一次涨价在3月1010年后,特斯拉和比亚迪三电性能对比,谁才是真正的赢家?比亚迪与特斯拉之间的差距到底有多大?有的车主说,对比电机电池电控这三电技术立判高下,也有老司机说,冬天跑一趟高速,他们二者之间的差距立马体现得淋漓尽致,这两种说法都从侧面体现了比亚马斯克的德国工厂开业,会影响中国的Model3Y价格吗?图源自网络选题刘笠采编南书排版忘尘3月22日,特斯拉位于德国柏林郊区的超级工厂正式开业。现场,马斯克来了一段Freestyle,并向用户交付首批30辆德国产ModelY。受此消息提阿里滴滴相继退场,美团京东大幅裁员,社区团购为啥变了天随着科技的不断发展,我们的日常生活习惯,也在被逐渐改变。在线上买饭,线上打车之后,我们也迎来了线上买菜。社区团购,不仅解决了当初盒马生鲜最后一公里的问题,而且还给有需要的人,提供了李佳琦出淘,引发众人猜测,电商直播或将迎来新变局近日,李佳琦的官方微信小程序上接入了多家电商平台商品链接,这一操作引发众人猜测,疑似李佳琦在为出淘做准备。针对这一猜测,李佳琦所在公司美ONE回应称没有其他商业计划。尽管如此,这也因侵权被起诉,知名视频平台被强制执行因拖欠版权费被判赔偿英超约2。13亿美元(约合人民币13。54亿元)而出圈的国内视频平台pptv,其运营方上海聚力传媒技术有限公司(下称聚力传媒),近日新增一则被执行人信息,执行标变量存储过程和函数流程控制结构变量系统变量全局变量会话变量自定义变量用户变量局部变量说明变量由系统定义,不是用户定义,属于服务器层面注意全局变量需要添加global关键字,会话变量需要添加session关键字,黄仁勋我们对英特尔制造英伟达芯片持开放态度英伟达正在考虑通过让英特尔工厂为其生产部分芯片来进一步扩大供应规模。英伟达公司首席执行官黄仁勋在本周三举行的线上新闻发布会中表示英特尔对于我们使用他们的代工厂很感兴趣,我们也有兴趣空气能热泵,太费电了为什么?相对于独立采暖的供暖方式中,空气能正因为有它独特的优势才被市场所接受!省电是它比较重要的特性!如果,你目前太费电,原因可能有一下情况第一,如果在北方,是不是选用北方采暖专用的超低温有没有欠款逾期久的人来谈谈感受?从贷里面曾经贷过1笔14500元的贷款,已经差不多有2年时间了,从贷款放下来的第一天开始,我就没有想着还!为什么?因为这笔贷款我原来急用,拖了5天都没有放下来,等我度过难关了,强烈