多线程是指可以在同一个时间段执行多个任务,例如你想爬取某个网站的图片,1s可以打印出20个资源链接,但是如果使用
requests.get(url)资源会有一个锁定的状态,也就是第一个url请求完成后才会执行第二个url请求,假设请求一个资源要1s,20
个资源就要20s,但是使用多线程,就可以在1s中的打印时间内,把所有任务都交给一个线程,这样2s就能把所有资源请求到,
这样就节省了10倍的时间。下面教大家如何使用多线程
第一步:import threading
一些查看线程状态的功能
# print(threading.active_count()) #此时在运行的线程数
# print(threading.enumerate()) #哪些线程在工作
# print(threading.current_thread())#目前运行的线程
我们先定义一个乘法的工作
def mutiply(): #定义线程的工作
for i in range(1,200):
time.sleep(1)
print(10*10)
#这里使用休眠是为了更清晰的展现多线程如何工作,使用time.sleep()要先import time
然后定义一个加法的工作
def add(): #定义线程的工作
for i in range(1, 200):
time.sleep(1)
print(25+25)
然后我们定义一个线程
mutiply_thread=threading.Thread(target=mutiply) #加入乘法线程,target后面为要做的事
mutiply_thread.start() #线程定义好后必须start(),不然不会执行
add_thread=threading.Thread(target=add) #加入加法线程,target后面为要做的事
add_thread.start() #线程开始
我们通过运行可以发现
这些加法乘法的工作都是并行的,也就是在执行加法的同时也在执行乘法,第一行是线程数,后面两行是线程运行状态,我们也可以把查看状态的代码加入两个函数中实时查看状态。
我们可以理解为,程序本来是一直向下运行的,一般程序是要一个一个块执行完后才会执行下一个块,这期间有一个锁死状态
,但是多线程的话,把工作加入线程后就继续执行下一个块,这期间加入的线程和后面的块并行工作。下面是程序的代码。
import threading #import包
import time
def mutiply(): #定义线程的工作
for i in range(1,200):
time.sleep(1)
print(10*10)
def add():
for i in range(1, 200):
time.sleep(1)
print(25+25)
#def main(): #要做的事
#if __name__=='__main__':
#main()
mutiply_thread=threading.Thread(target=mutiply) #加入线程,target后面为要做的事
mutiply_thread.start()
add_thread=threading.Thread(target=add)
add_thread.start()
print(threading.active_count()) #此时在运行的线程数
print(threading.enumerate()) #哪些线程在工作
print(threading.current_thread())#目前运行的线程