设为首页 收藏本站
查看: 1071|回复: 0

[经验分享] Python3 多线程讲解

[复制链接]

尚未签到

发表于 2018-8-8 07:36:13 | 显示全部楼层 |阅读模式
  前言
  Python3 线程中常用的两个模块为
  ·_thread
  ·threading(推荐使用)
  thread 模块已被废弃。用户可以使用 threading 模块代替。所以,在 Python3 中不能再使用”thread” 模块。为了兼容性,Python3 将 thread 重命名为 “_thread”。
  _thread
  Python中使用线程有两种方式:函数或者用类来包装线程对象。
  函数式:调用 _thread 模块中的start_new_thread()函数来产生新线程。语法如下:
  _thread.start_new_thread ( function, args[, kwargs] )1
  参数说明:
  ·function - 线程函数。
  ·args - 传递给线程函数的参数,他必须是个tuple类型。
  ·kwargs - 可选参数。
  1  #!/usr/bin/python3
  2  # -- coding: UTF-8 --
  3
  4  # Python3 多线程
  5
  6  import _thread
  7  import time
  8  import sys
  9
  10  # 为线程定义一个函数
  11
  12  def print_time(threadName,delay):
  13        count=0
  14     while count<5:
  15        time.sleep(delay)
  16        count+=1
  17   print(&quot;%s:%s&quot;%(threadName,time.ctime(time.time())))
  18
  19  # 创建两个线程
  20  try:
  21      _thread.start_new_thread(print_time,(&quot;Thread-1&quot;,2,))
  22      _thread.start_new_thread(print_time,(&quot;Thread-2&quot;,4,))
  23  except:
  24     print(&quot;Error:无法启动线程&quot;,sys.exc_info())
  25
  26  while 1:
  27     pass
  threading
  1  #!/usr/bin/python3
  2  # -- coding: UTF-8 --
  3
  4  # python3 多线程
  5
  6  import threading
  7  import time
  8
  9  exitFlag=0
  10
  11  def print_time(threadName,delay,counter):
  12   while counter:
  13        if exitFlag:
  14            threadName.exit()
  15       time.sleep(delay)
  16        print(&quot;%s:%s&quot;%(threadName,time.ctime(time.time())))
  17        counter-=1
  18

  19 >  20    def init(self,threadID,name,counter):
  21      threading.Thread.init(self)
  22        self.threadID=threadID
  23        self.name=name
  24        self.counter=counter
  25    def run(self):
  26        print(&quot;线程开始:&quot;+self.name)
  27        print_time(self.name,self.counter,5)
  28       print(&quot;线程退出:&quot;+self.name)
  29
  30  # 创建线程
  31  thread1=myThread(1,&quot;Thread-1&quot;,1)
  32  thread2=myThread(2,&quot;Thread-2&quot;,2)
  33
  34  # 开始新线程
  35  thread1.start()
  36  thread2.start()
  37  thread1.join()
  38  thread2.join()
  39
  线程模块
  Python3 通过两个标准库 _thread 和 threading 提供对线程的支持。
  _thread 提供了低级别的、原始的线程以及一个简单的锁,它相比于 threading 模块的功能还是比较有限的。
  threading 模块除了包含 _thread 模块中的所有方法外,还提供的其他方法:
  ·threading.currentThread(): 返回当前的线程变量。
  ·threading.enumerate(): 返回一个包含正在运行的线程的list。正在运行指线程启动后、结束前,不包括启动前和终止后的线程。
  ·threading.activeCount(): 返回正在运行的线程数量,与len(threading.enumerate())有相同的结果。
  除了使用方法外,线程模块同样提供了Thread类来处理线程,Thread类提供了以下方法:
  ·run(): 用以表示线程活动的方法。
  ·start():启动线程活动。
  ·join([time]): 等待至线程中止。这阻塞调用线程直至线程的join() 方法被调用中止-正常退出或者抛出未处理的异常-或者是可选的超时发生。
  ·isAlive(): 返回线程是否活动的。
  ·getName(): 返回线程名。
  ·setName(): 设置线程名。
  原文:http://www.runoob.com/python3/python3-multithreading.html

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-548382-1-1.html 上篇帖子: Python与Excel不得不说的事 下篇帖子: python监控进程
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表