Python2标准库中提供了两个模块thread和threading支持多线程。
thread有一些缺陷在Python3中弃用,为了兼容性,python3 将 thread 重命名为 “_thread”,在Python3中推荐直接使用threading。
创建线程对象
class threading.Thread(group=None, target=None, name=None, args=(), kwargs={}, *, daemon=None)
参数说明:
group 应该为 None;为了日后扩展 ThreadGroup 类实现而保留。 target 是用于 run() 方法调用的可调用对象。默认是 None,表示不需要调用任何方法。 name 是线程名称。默认情况下,由 "Thread-N" 格式构成一个唯一的名称,其中 N 是小的十进制数。 args 是用于调用目标函数的参数元组。默认是 ()。 kwargs 是用于调用目标函数的关键字参数字典。默认是 {}。 如果 daemon 不是 None,线程将被显式的设置为 守护模式,不管该线程是否是守护模式。如果是 None (默认值),线程将继承当前线程的守护模式属性。
线程对象其中的几个方法
start()开始线程活动。 run() 代表线程活动的方法。 join(timeout=None) 等待,直到线程终结
使用线程有两种方式:函数或者用类来包装线程对象
例子1:使用函数
import random import threading import time def run(threadName): for i in range(5): time.sleep(random.random()) #这里只是演示参数,获取当前线程名可用threading.currentThread().getName() print('{} : {}'.format(threadName, i)) t1 = threading.Thread(target=run, args=('thread 1',)) t1.start() t2 = threading.Thread(target=run, args=('thread 2',)) t2.start()
例子2:使用类
import random import threading import time class test(threading.Thread): def __init__(self,name): super().__init__() self.name = name def run(self): for i in range(5): time.sleep(random.random()) print('{} : {}'.format(self.name, i)) t1 = test('thread 1') t1.start() t2 = test('thread 2') t2.start()
例子1和例子2某次运行结果:
thread 1 : 0 thread 1 : 1 thread 2 : 0 thread 1 : 2 thread 2 : 1 thread 2 : 2 thread 1 : 3 thread 2 : 3 thread 2 : 4 thread 1 : 4
例子3:
import random import threading import time def run(threadName,): print('{} start'.format(threadName)) time.sleep(random.random()) print('{} end'.format(threadName)) threads = [] #创建10个线程对象 for i in range(10): threads.append(threading.Thread(target=run,args=('thread ' + str(i),))) #运行线程 for th in threads: th.start() #等待,直到线程终结。 for th in threads: th.join() print("finished")
某次运行结果:
thread 0 start thread 1 start thread 2 start thread 3 start thread 4 start thread 5 start thread 6 start thread 7 start thread 8 start thread 9 start thread 2 end thread 3 end thread 9 end thread 0 end thread 1 end thread 8 end thread 6 end thread 4 end thread 7 end thread 5 end finished