为了账号安全,请及时绑定邮箱和手机立即绑定

Python3 多线程讲解

标签:
Python

前言

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("%s:%s"%(threadName,time.ctime(time.time())))
18
19  # 创建两个线程
20  try:
21      _thread.start_new_thread(print_time,("Thread-1",2,))
22      _thread.start_new_thread(print_time,("Thread-2",4,))
23  except:
24     print("Error:无法启动线程",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("%s:%s"%(threadName,time.ctime(time.time())))
17        counter-=1      
18
19  class myThread(threading.Thread):
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("线程开始:"+self.name)
27        print_time(self.name,self.counter,5)
28       print("线程退出:"+self.name)
29
30  # 创建线程
31  thread1=myThread(1,"Thread-1",1)
32  thread2=myThread(2,"Thread-2",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(): 设置线程名。


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消