转自http://blog.csdn.net/lanphaday/archive/2009/04/16/4083852.aspx
学习之
-
-
- import urllib, httplib
- import thread
- import time
- from Queue import Queue, Empty, Full
- HEADERS = {"Content-type": "application/x-www-form-urlencoded",
- 'Accept-Language':'zh-cn',
- 'User-Agent': 'Mozilla/4.0 (compatible; MSIE 6.0;Windows NT 5.0)',
- "Accept": "text/plain"}
- UNEXPECTED_ERROR = -1
- POST = 'POST'
- GET = 'GET'
- def base_log(msg):
- print msg
- def base_fail_op(task, status, log):
- log('fail op. task = %s, status = %d'%(str(task), status))
- def get_remote_data(tasks, results, fail_op = base_fail_op, log = base_log):
- while True:
- task = tasks.get()
- try:
- tid = task['id']
- hpt = task['conn_args']
- except KeyError, e:
- log(str(e))
- continue
- log('thread_%s doing task %d'%(thread.get_ident(), tid))
-
- conn = httplib.HTTPConnection(**hpt)
-
- try:
- params = task['params']
- except KeyError, e:
- params = {}
- params = urllib.urlencode(params)
-
-
- try:
- method = task['method']
- except KeyError:
- method = 'GET'
-
-
- try:
- url = task['url']
- except KeyError:
- url = '/'
-
-
- headers = HEADERS
- try:
- tmp = task['headers']
- except KeyError, e:
- tmp = {}
- headers.update(tmp)
-
- headers['Content-Length'] = len(params)
-
- try:
- if method == POST:
- conn.request(method, url, params, headers)
- else:
- conn.request(method, url + params)
- response = conn.getresponse()
- except Exception, e:
- log('request failed. method = %s, url = %s, params = %s headers = %s'%(
- method, url, params, headers))
- log(str(e))
- fail_op(task, UNEXPECTED_ERROR, log)
- continue
-
- if response.status != httplib.OK:
- fail_op(task, response.status, log)
- continue
-
- data = response.read()
- results.put((tid, data), True)
-
- class HttpPool(object):
- def __init__(self, threads_count, fail_op, log):
- self._tasks = Queue()
- self._results = Queue()
-
- for i in xrange(threads_count):
- thread.start_new_thread(get_remote_data,(self._tasks, self._results, fail_op, log))
-
- def add_task(self, tid, host, url, params, headers = {}, method = 'GET', timeout = Nonecolor: black; background-color: inherit; padding: 0p
分享到:
相关推荐
在本项目中,我们关注的是利用Python实现的“m3u8多线程下载器”。M3U8是一种基于HTTP/HTTPS协议的流媒体格式,常用于在线视频播放,尤其在移动设备上。它将视频文件分割成多个小片段,方便流式传输。 这个下载器...
本主题聚焦于如何使用Python的Selenium与Chrome浏览器进行多开和多线程操作,结合phantomjs和chromedriver这两个关键组件来实现。首先,让我们详细了解一下这些概念。 1. **Selenium**: Selenium是一个强大的Web...
总结来说,"Python-HTTP大文件多线程下载工具支持断点续传"是一个结合了HTTP通信、多线程编程和文件操作的实例,对于提升Python网络编程能力,尤其是处理大文件下载问题,具有很高的学习价值。通过深入研究和实践,...
本文为大家分享了python实现的一个多线程网页下载器,供大家参考,具体内容如下 这是一个有着真实需求的实现,我的用途是拿它来通过 HTTP 方式向服务器提交游戏数据。把它放上来也是想大家帮忙挑刺,找找 bug,让它...
下面将详细阐述如何使用Python实现多线程下载HTTP文件以及如何将Python脚本转化为可执行的.exe文件。 首先,我们需要导入必要的库,如`requests`用于发送HTTP请求,`threading`用于多线程操作,以及`os`和`sys`进行...
另外包含Python多线程、异步+多进程爬虫实现代码详解,需要的可下载试试! 多线程对爬虫的效率提高是非凡的,当我们使用python的多线程有几点是需要我们知道的:1、Python的多线程并不如java的多线程,其差异在于当...
本离线安装包“python多线程池离线安装包.zip”包含了实现Python多线程所需的关键组件。主要包含以下三个子文件: 1. `pip-19.2.3.tar.gz`:这是Python的包管理器pip的一个版本,用于安装和管理Python库。在离线...
通过学习这个"multithreading-spider-master"项目,你将深入理解Python多线程爬虫的原理和实践,掌握如何设计并优化一个高效的爬虫系统。在实际操作中,还需要注意遵循网络道德,合理使用爬虫技术,避免对目标网站...
Python的`threading`模块是实现多线程的基础,它允许我们在一个程序中同时执行多个任务。在Python中创建线程非常简单,只需要定义一个函数作为线程的目标,然后使用`Thread`类实例化一个线程对象,最后调用`start()`...
本文件“Python基于多线程协程的文献下载器源码.zip”提供了实现这一功能的示例代码,旨在帮助开发者理解和应用这两种技术。 首先,我们来探讨多线程(Multithreading)。在Python中,多线程允许一个程序同时运行多...
根据提供的文件信息,我们可以推断出本教程系列主要讲解如何使用Python中的Socket编程结合多线程技术来开发一个FTP(文件传输协议)软件。接下来,我们将深入探讨这一主题中的几个关键知识点。 ### 一、Python ...
【作品名称】:基于Python+PyQt制作GUI的劲爆多进程和多线程下载器 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】: ...
在Python编程语言中,多线程是实现并发执行任务的重要机制。它允许程序同时执行多个不同的任务,从而提高效率和响应速度。在这个基于Python的多线程例子中,我们将深入探讨如何创建和管理线程,以及如何利用它们来...
"Python实现的类IDM高速下载程序"是一个利用Python编程语言构建的多线程下载工具,它借鉴了Internet Download Manager (IDM) 的核心理念,即通过分段下载和多线程并行处理来显著提高下载速度,同时不受网络速度限制...
本项目通过使用Python多线程技术成功实现了对京东商品列表和详情页的爬取,不仅能够有效地抓取数据,还能高效地处理大量图片的下载与存储。此项目不仅可以作为学习Python爬虫技术的良好案例,还具有一定的实用价值,...
本文将介绍使用Python编写多线程HTTP下载器,并生成.exe可执行文件。 环境:windows/Linux + Python2.7.x 单线程 在介绍多线程之前首先介绍单线程。编写单线程的思路为: 1.解析url; 2.连接web服务器; 3.构造...
标题中的“Python-一个从数据库取数据进行多线程爬文件存本地的爬虫”表明这是一个使用Python编程语言实现的项目,它具有两个主要功能:从数据库获取数据以及使用多线程爬取并存储文件到本地。这个项目可能是为了...
为了实际验证这四种方法的性能差异,可以设计一个简单的爬虫程序,分别用这四种方式下载一定数量的网页。通过记录下载时间和比较结果,可以直观地看到不同并发模型在爬虫中的效率差异。 总结: - 对于I/O密集型任务...
在IT领域,多线程是一种...通过以上知识点的整合和应用,我们可以构建一个智能的多线程图片下载器,不仅提高下载效率,还能实现自动翻页和下载。这个项目对于学习Python多线程编程和网络爬虫技术具有很高的实践价值。