多线程,多进程
Posted 测试的自我放逐
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多线程,多进程相关的知识,希望对你有一定的参考价值。
1.多线程、多进程的简介:
1)线程是程序里面最小的执行单元。
2)进程是资源的集合。
线程是包含在一个进程里面的, 一个进程可以有多个线程。
一个进程里面默认有一个线程。
2.多线程
import threading,time #导入线程模块
def run():
time.sleep(3) #干活需要3s
print(‘哈哈哈‘)
for i in range(5): #串行 5个依次执行15s
run()
for i in range(5): #并发
t = threading.Thread(target=run) #实例化了一个线程 target 只需写一个函数名即可。
t.start() #这里启动了5个线程,这里理论应该执行3s
#多线程, 就是N个线程一起在干活
#1、串行
# start_time = time.time()
# for k,v in urls.items():
# down_html(k,v) #传入两个参数
# end_time = time.time()
# run_time = end_time - start_time
# print(‘下载总共花了xxx时间‘,run_time)
#2、并行 (爬虫举例)
urls = {
‘besttest‘:‘http://www.besttest.cn‘,
‘niuniu‘:‘http://www.nnzhp.cn‘,
‘dsx‘:‘http://www.imdsx.cn‘,
‘cc‘:‘http://www.cc-na.cn‘
}
import requests,time
data= {}
def down_html(file_name,url): #下载网站内容
start_time = time.time()
res = requests.get(url).content #返回的2进制的内容
open(file_name+‘.html‘,‘wb‘).write(res) #2进制的直接写入
end_time = time.time()
run_time = end_time-start_time
data[url] = run_time
threads = []
start_time = time.time()
for k,v in urls.items(): #5次
t = threading.Thread(target=down_html,args=(k,v)) #多线程的函数如果传参的话,必须得用args
t.start()
threads.append(t) #
#6个线程
#进程里面默认有一个线程,这个线程叫做主线程 直接打印时间就是主线程执行代码的时间
for t in threads:
t.join()
print(data)
end_time = time.time()
run_time = end_time - start_time
print(‘下载总共花了xxx时间‘,run_time)
以上是关于多线程,多进程的主要内容,如果未能解决你的问题,请参考以下文章