多线程

主线程 --- 默认有个主线程
子线程 --- 主线程启动子线程

import threading,time

def run():
  # time.sleep(3)
  print('hahahah')


for i in range(5):
  t = threading.Thread(target=run) #实例化了一个线程
  t.start()
  # run()

***多线程,就是 N 个线程一起在干活(并发) --- N 就是上面的循环次数

 


例:写一个实现爬虫功能的代码,给一个 url 字典,k为保存爬取信息的文件名,v 为 url 地址

方法一、串行(单线程)
import requests,time

urls = {
  'besttest':'http://www.besttest.cn',
  'niuniu':'http://www.nnzhp.cn',
  'dsx':'http://www.imdsx.cn',
  'cc':'http://www.cc-na.cn'
  }

def down_html(file_name,url):
  res = requests.get(url).content
  open(file_name+'.html','wb').write(res)


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)


方法二、并行(多线程) ---- 运行结果不符,因为记得是主线程的运行时间,而主线程只是启动了子线程,未等待子线程执行结束(线程等待请参考博客另一篇随笔)

import requests,time,threading

urls = {
  'besttest':'http://www.besttest.cn',
  'niuniu':'http://www.nnzhp.cn',
  'dsx':'http://www.imdsx.cn',
  'cc':'http://www.cc-na.cn',
  'alin':'http://www.limlhome.cn'
  }

def down_html(file_name,url):
  res = requests.get(url).content
  open(file_name+'.html','wb').write(res)


start_time = time.time()
for k,v in urls.items():
  t = threading.Thread(target=down_html,args=(k,v)) #多线程的函数传参的话,必须得用 args
  t.start() #主线程 启动线程后,自动走下一步代码,不会等线程执行完
end_time = time.time()
run_time = end_time - start_time
print('下载总共花了xxx时间',run_time) #该打印的时间是 主线程 运行的时间

 

**************************************
线程与线程之间运行是独立的;上述一共有 6 个线程,其中包括一个主线程,用于线程的启动
*** 进程里面默认有一个线程,这个线程叫做主线程

 

转载于:https://www.cnblogs.com/lynn-chen/p/9117964.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值