Python3 多线程讲解

发布时间:2019-09-27 07:09:13编辑:auto阅读(1895)

    前言

    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(): 设置线程名。

    原文:http://www.runoob.com/python3/python3-multithreading.html

关键字