我们平时打开的每个程序都是一个进程,线程是包含在进程中的,一个进程里至少有一个线程,线程之间是相互独立的。
1、多线程
首先pycharm中导入threading模块
以下为一个简单的相关代码
import threading
import time
import requests
def sayHi(name):
time.sleep(2)
print(name)
sayHi('a')
sayHi('b')
sayHi('c')
2、主线程等待子线程,当子线程同时并发结束之后,主线程开始执行
以下为一个简单的爬虫,涉及到的相关代码
def downHtml(url,name):
content = requests.get(url).content#获取网站的内容,二进制
f=open(name+'.html','wb')
f.write(content)
f.close()
urls=[
['nnzhp','http://www.nnzhp.cn'],
['dsx','http://www.imdsx.cn'],
['besttest','http://www.besttest.cn']
]
start_time = time.time()
threads=[]#存所有的子线程
for url in urls:
t=threading.Thread(target=downHtml,args=(url[1],url[0]))
t.start()
threads.append(t)
for t in threads:#等待子线程
t.join()#主线程等待子线程结束
end_time = time.time()
print(end_time-start_time)
3、守护线程,设置守护线程时,一旦主线程执行结束,那么子线程立刻结束,不管子线程是否运行完
import threading,time
def pz():
time.sleep(2)
print('秦始皇陪葬')
threads=[]
for i in range(10):
t=threading.Thread(target=pz)
t.setDaemon(True)#设置子线程为守护线程。守护线程就是,一旦主线程执行结束,子线程立刻结束,不管子线程有没有运行完
t.start()
threads.append(t)
for t in threads:
t.join()#如果主线程等待子线程的话,那么设置的守护线程就不好使了
print('done')
注:如果设置了主线程等待子线程,那么设置的守护线程就无效了
浙公网安备 33010602011771号