1.Thread类
普通调用
t = Thread(target=test, args=(i,))# test为目标函数名, 若函数需要参数将其以元组形 # 式赋给args, 若无参数可不写
t.start()# 用start()函数开启线程
例子
import time
from threading import Thread
# 目标函数
def test(i):
print("hello ", i)
time.sleep(1)
def main():
# 循环5次,开起五个线程
for i in range(5):
t = Thread(target=test, args=(i,))
t.start()
if __name__ == '__main__':
main()
继承Thread类
定义一个自己的类继承自Thread,重写run()方法,即 将原本执行任务的函数内容移植到run()方法中.可通过类的属性传参.
例子
from threading import Thread
import time
class MyThread(Thread):
def __init__(self, i):
Thread.__init__(self) # 初始化父类"构造函数"
self.i = i # 初始化,目的将run函数参数作为类的属性
def run(self):
time.sleep(1)
msg = "I'm " + self.name + " @ " + str(self.i)
print(msg)
def main():
for i in range(3):# 开启三个线程
t = MyThread(i)# 实例化自己的类
t.start()
if __name__ == '__main__':
main()
线程的执行顺序
上面的例子中线程的执行顺序是随机的
2.线程间共享全局变量
下面例子中test1()和test2()共享g_num全局变量.希望test1()执行的结果是1000000,test2()执行的结果是2000000.但是time.sleep()函数会影响结果.
from threading import Thread
import time
g_num = 0
def test1():
global g_num
for i in range(1000000):
g_num += 1
print('---test1 g_num is %d---' % g_num)
def test2():
global g_num
for i in range(1000000):
g_num += 1
print('---test2 g_num is %d---' % g_num)
t1 = Thread(target=test1)
t1.start()
# time.sleep(3) # 运行这句话与不运行这句话结果不一样
t2 = Thre