我们平时打开的每个程序都是一个进程,线程是包含在进程中的,一个进程里至少有一个线程,线程之间是相互独立的。

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')

注:如果设置了主线程等待子线程,那么设置的守护线程就无效了

 


posted on 2018-03-06 17:04  王小洋err  阅读(117)  评论(0)    收藏  举报