转自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链接,可下载简单加密资源。 *-cmd.exe文件显示命令行窗内,便于定位下载\合并失败的问题 *.exe文件不显示命令行窗口
本文为大家分享了python实现的一个多线程网页下载器,供大家参考,具体内容如下 这是一个有着真实需求的实现,我的用途是拿它来通过 HTTP 方式向服务器提交游戏数据。把它放上来也是想大家帮忙挑刺,找找 bug,让它...
本项目的目的是使用Python编写一个http下载器,并生成(*.exe可执行文件)
本文将介绍使用Python编写多线程HTTP下载器,并生成.exe可执行文件。 环境:windows/Linux + Python2.7.x 单线程 在介绍多线程之前首先介绍单线程。编写单线程的思路为: 1.解析url; 2.连接web服务器; 3.构造...
Python基于多线程协程的文献下载器源码.zip
Python多线程爬虫扫描器_Python源码文件,就一个PY文件,可以扫描很多内容,带注释
02.6.利用Python SOCKET多线程开发FTP软件(全6集)
一个基于PyQt制作GUI的劲爆多进程和多线程下载器源码.zip
这是一个使用Python3编写的动漫之家的漫画批量下载器。相比于我之前所写过的几个爬虫,这个爬虫也是我第一次尝试全异步实现的一个爬虫例子,使用了aiohttp和aiofile这两个异步实现库来做支撑,相对于单线程爬虫和多...
因为 Minix 只是教学使用,因此功能并不强,林纳斯 经常要用他的终端 仿真器(Terminal Emulator) 去访问大学主机上的新闻组和邮件,为了方便读写和下载文件,他自己编写了磁盘驱动程序和文件系统,这些在后来成为...
第一次实验内容是:使用Python3 实现TCP全连接端口扫描器;第二次实验内容是:用户从客户端进行登录后,可以进行从服务端下载文件;第三次实验内容是:多线程TCP端口扫描。最后课程设计是《多功能服务端与客户端》,...
一个简单的网络蜘蛛框架,由Python编写,需要Python3.8+ PSpider的特点 1. 支持多线程爬行模式(使用线程) 2. 支持使用代理进行爬行(使用线程和队列) 3.定义一些实用函数和类,例如:UrlFilter、get_string_num等 4....
17.5 在多线程环境中使用SWIG生成的模块 603 17.6 用PySequence_Fast将Python序列转为 C数组 604 17.7 用迭代器逐个访问Python序列的元素 608 17.8 从Python可调用的C函数中返回None 611 17.9 用gdb调试动态载入...
使用python实现,原理是用requests下载帖子每页的html,然后将其中所有css、script和图片保存至本地 优势 下载后的帖子可以离线翻页,方便阅读 不同帖子共用css、图片等资源,节约空间 自动将新浪外链图片的https...
可以在这些基础上学习借鉴进行修改和扩展,实现其它功能。 可放心下载学习借鉴,你会有所收获。 可放心下载学习借鉴,你会有所收获。 可放心下载学习借鉴,你会有所收获。 —— 博主领域:嵌入式领域&人工智能&软件...
※开发一个堡垒机,实现用户可以通过WEB 和命令行登录到所有LINUX服务器上,纪录所有用户命令操作 2、项目实战四、通过Python脚本连接MYSQL数据库实现数据自动入库、更新 3、项目实战五、开发C/S架构备份服务器,...
小说阅读器使用 Python 编写,图形界面使用 Tkinter 库,信息传输依赖标准的 Socket API。提供的功能有:用户注册、用户登录、小说阅读、小说下载...在服务器端采用多线程设计,可长时间运行并支持同时支持多个客户端。
由于OneDrive可以支持多个连接,(具体最大有多少清除)于是采用多线程下载的方法实现视频的边下边播。 原理 我是用的多线程并非平均分为多少段,每段多少M。而是把视频分割成单位为1M的多个片段。按顺序将这些片段...