threading是python中的一个标准库。
import threading #导入threading库
一、threading库中的一些方法:
threading.active_count() # 返回正在运行线程的数量,相当于len(threading.enumerate())
threading.enumerate() # 返回一个正在运行线程的列表
threading.current_thread() #返回当前线程变量
二、threading中的Thread类
threading.Thread(group=None, target=None, name=None, args=(), kwargs={}, *, daemon=None)
其中最重要的参数是target,将一个回调函数赋值给它。下边会有演示。
name给线程起名字。
args用来传递参数。
三、创建线程
def thread_job():
print("This is a thread of %s" % threading.current_thread())
thread = threading.Thread(target=thread_job)
注意:赋值给target的回调函数是不带括号的,不能这样thread = threading.Thread(target=thread_job())
否则会出现问题。不能带括号的原因
也可以自定义类继承Thread类。
四、启动线程
threate.start()
创建线程后,本身不会自己启动,需要使用start()函数。
五、join方法:阻塞主线程
thread.join()
使用join方法后,会阻塞该子线程所在的主线程会被阻塞,主线程会等待该子线程执行结束后再继续执行。
六、Queue队列:返回结果
多线程是没有返回值的,需要把结果放在队列中。
可以使用python的标准库queue
from queue import Queue # 导入queue库中的Queue类
七、Lock
使用threading库中的Lock类,每次只允许一线程的数据操作。
def thread_job():
#lock不需要global声明全局变量,因为不修改这个变量
lock.acquire()
print("This is a thread of %s" % threading.current_thread())
lock.release()
lock = threading.Lock()
Thread = threading.Thread(target=thread_job())
Thread.start()
Thread.join()