其实关于爬虫并没有明确多少数量开线程,因为这个是无穷的,随着时代的不断发展,每一个革新都给我们焕然一新的感觉,可能大家现在在学习的时候,已知内容是有限的,真正在不断探索以后,会发现这个内容是无穷了,小编就看到一组代码可以爬取几百万的线程数据,一起来看下吧~

1、爬虫环境

Pycharm+python3.7.0

2、进程和线程的关系:

一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。

资源分配给进程,同一进程的所有线程共享该进程的所有资源。

CPU 分给线程,即真正在 CPU 上运行的是线程。

3、多线程通信实例

因为全局变量并不是线程安全的,比如说全局变量里(列表类型)只有一个 url 了,线程 B 判断了一下全局变量非空,在还没有取出该 url 之前,cpu 把时间片给了线程 C,线程 C 将最后一个url 取走了,这时 cpu 时间片又轮到了 B,B 就会因为在一个空的列表里取数据而报错,而 queue 模块实现了多生产者、多消费者队列,在放值取值时是线程安全的。

4、实例代码import threading # 导入 threading 模块

from queue import Queue #导入 queue 模块

import time #导入 time 模块

# 爬取文章详情页

def get_detail_html(detail_url_list, id):

while True:

url = detail_url_list.get() #Queue 队列的 get 方法用于从队列中提取元素

time.sleep(2) # 延时 2s,模拟网络请求和爬取文章详情的过程

print("thread {id}: get {url} detail finished".format(id=id,url=url)) #打印线程 id 和被爬取了文章内容的 url

# 爬取文章列表页

def get_detail_url(queue):

for i in range(10000):

time.sleep(1) # 延时 1s,模拟比爬取文章详情要快

queue.put("http://testedu.com/{id}".format(id=i))#Queue 队列的 put 方法用于向 Queue 队列中放置元素,由于 Queue 是先进先出队列,所以先被 Put 的 URL 也就会被先 get 出来。

print("get detail url {id} end".format(id=i))#打印出得到了哪些文章的 url

#主函数

if __name__ == "__main__":

detail_url_queue = Queue(maxsize=1000) #用 Queue 构造一个大小为 1000 的线程安全的先进先出队列

# 先创造四个线程

thread = threading.Thread(target=get_detail_url, args=(detail_url_queue,)) #A 线程负责抓取列表

url

html_thread= []

for i in range(3):

thread2 = threading.Thread(target=get_detail_html, args=(detail_url_queue,i))

html_thread.append(thread2)#B C D 线程抓取文章详情

start_time = time.time()

# 启动四个线程

thread.start()

for i in range(3):

html_thread[i].start()

# 等待所有线程结束,thread.join()函数代表子线程完成之前,其父进程一直处于阻塞状态。

thread.join()

for i in range(3):

html_thread[i].join()

print("last time: {} s".format(time.time()-start_time))

#等 ABCD 四个线程都结束后,在主进程中计算总爬取时间。

好了,以上就是关于python爬虫里的进程内容了,大家可以去了解下哦~python的内容都是无穷尽的,大家也可以开拓创新,去找到知识的彼岸。

python可以开多少线程_python爬虫可以开多少线程?相关推荐

  1. python获取当前线程_Python爬虫(线程,进程)

    第一章   线程的使用 并发:指的是任务数多余cpu核数 并行:指的是任务数小于等于cpu核数,即任务真的是一起执行的 1.线程的概念 线程就是在程序运行过程中,执行程序代码的一个分支,每个运行的程序 ...

  2. python爬取收费素材_Python爬虫练习:爬取素材网站数据

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 在工作中的电子文案.ppt,生活中的新闻.广告,都离不开大量的素材,而素材 ...

  3. python通过ip池爬_python 爬虫 代理ip池(适合初学者)

    初次学习python爬虫的朋友在频繁访问被爬取页面网站时都会被拦截,也就是限制ip.这里教教大家建立代理ip池. #!/usr/bin/env python3# -*- coding: utf-8 - ...

  4. python 协程、进程、线程_Python 中的进程、线程、协程

    1. 进程 进程是正在运行的程序实例,是内核分配资源的最基本的单元.进程拥有自己独立的堆和栈,独立的地址空间,资源句柄.进程由 OS 调度,调度开销较大,在并发的切换过程效率较低. Python 提供 ...

  5. pythonmultiprocessing之 queue线程_python中的进程、线程(threading、multiprocessing、Queue、subprocess)...

    Python中的进程与线程 学习知识,我们不但要知其然,还是知其所以然.你做到了你就比别人NB. 我们先了解一下什么是进程和线程. 进程与线程的历史 我们都知道计算机是由硬件和软件组成的.硬件中的CP ...

  6. python爬虫进程和线程_python爬虫番外篇(一)进程,线程的初步了解-阿里云开发者社区...

    整理这番外篇的原因是希望能够让爬虫的朋友更加理解这块内容,因为爬虫爬取数据可能很简单,但是如何高效持久的爬,利用进程,线程,以及异步IO,其实很多人和我一样,故整理此系列番外篇 一.进程 程序并不能单 ...

  7. python爬虫文件下载很慢卡住线程_python爬虫多线程假死怎么解决?

    抓baidu数据,但跑不了多久就假死,无反应也不报错,初学python,搞了两礼拜没搞明白,望各位前辈指点下 #coding:utf-8 ''' 百度排名查询,代理多线程版本 ''' import S ...

  8. python高阶面试题_Python 爬虫面试题 170 道:2019 版

    通过本场 Chat,你将获得如下知识点:掌握 Python 的基础语法 语法常见的 Python 应用场景 掌握 Python 闭包的使用以及装饰器的使用 生成器和迭代器的使用 常见的设计模式的使用 ...

  9. python什么时候用框架_python爬虫-什么时候选择selenium框架框架?

    不知不觉已经从事Python编程开发5年了,Python刚开始其实不是很起眼,但是随着大数据越来越活,现在Python也越来越火了,但是目前我主要从事的Python工作还是以数据挖掘.数据爬虫技术深度 ...

最新文章

  1. 《Adobe InDesign CS5中文版经典教程》—第1课1.7节使用上下文菜单
  2. 关于导出excel 把一个dataset的多个datatable导入到一个excel的多个sheet中
  3. 移动web前端下拉刷新效果
  4. Android 实用开源控件
  5. 中科大 计算机网络15 DNS域名解析系统
  6. JDBC批量Insert深度优化(有事务)
  7. elastic集群单节点停机维护
  8. Linux 命令缩写
  9. MAC Home-brew 和 Home-brew Cask
  10. 【转】如何删除一个repository(仓库)
  11. 标准库Allocator的简易实现(二)
  12. 浪潮信息服务器哪个好,华为服务器和浪潮服务器哪个好?
  13. GooglePlay内购服务器验单配置
  14. diamond java_Diamond语法何时在Java 8中不起作用?
  15. [洛谷P3527] [POI2011]MET-Meteors
  16. android 读build.prop,Android系统下的build.prop文件
  17. 基于自适应反向学习的黏菌算法
  18. 女生学计算机和师范类哪个好,什么专业适合女生学
  19. python控制苹果手机触摸屏失灵怎么办_iPhone手机触屏不灵敏怎么办 触屏失灵乱跳等问题解决方法大全必看...
  20. iptables防火墙

热门文章

  1. 【★★★★★】提高PHP代码质量的36个技巧
  2. joomla第一单元第四节K2类别设置和第五节项目视图选项
  3. 数据挖掘应用案例:RFM模型分析与客户细分(转)
  4. 君正4750开发板使用日记2-Linux环境搭建与内核编译
  5. windows下mysql备份脚本
  6. 谁说SELINUX,IPTABLES,SAMBA不能共存?
  7. Insert增加数据
  8. 开电视显示网管服务器数据下发超时,关于网络管理中的常见问题解决
  9. Python程序设计语言基础05:函数和代码复用
  10. C语言中机考投机取巧的方法,计算机二级C语言考试机试经验三部曲:备考篇(一)...