十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
可以使用多进程或多线程并发下载。其实你的方法已经是多进程的一种了。
10年积累的做网站、网站建设经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计后付款的网站建设流程,更有大洼免费网站建设让你可以放心的选择与我们合作。
python中有多进程模块multiprocessing和多线程multithreading。
思路是这样,将需要下载的连接送入队列,然后各个进程(或线程)从队列里拿任务然后下载。前面的两个类库都提供进程、线程安全的队列。
楼下给了个多线程的示例,这里我给一个稍微复杂点的进程的示例。其实线程和进程库的接口基本是一致的。
#!/usr/bin/env python
# encoding=utf-8
# test.py
from multiprocessing import Queue, Process
from Queue import Empty
import urllib
import time
urls = [line.strip() for line in open('urls.txt')]
queue = Queue(1024)
for url in urls:
queue.put(url)
def download():
while True:
try:
url = queue.get()
f = urllib.urlopen(url)
r = f.read()
# 这里保存你下载的文件
except Empty:
time.sleep(5)
except Exception, e:
print 'download error: %s' % e
for i in range(10):
p = Process(target=download)
p.start()
p.join()
使用方法:编辑一个文件urls.txt,每行一个url。然后:
nohup ./test.py
结束进程则需要找到它的进程号,然后kill -9
望采纳,谢谢支持!
拼装后作为参数:
cmd = 'RETR ' + name()
frp.retrbinary(cmd, file_handel, bufsize)
给你一段代码吧。
import socket
socket.setdefaulttimeout(5.0)
import urllib
urllib.urlretrieve(url,filename)
通过socket类设置全局的超时。
知道文件的url地址就用urllib模块的urlretrieve函数。urllib.urlretrieve(url,
filename)filename是要保存到本地的文件名。函数后面还有2个可选参数,要用就看帮助文档吧。多线下载的话,每一线程要指定下载服务器上文件的哪一块。http协议中head里可以指定Range。下面用的是urllib2模块request
=
urllib2.Request(url)request.add_header("Range",
"bytes=%d-%d"%(1024,
204)
#指定下载文件的范围opener
=
urllib2.build_opener()data
=
opener.open(request).read()现在data里面就是文件的1024字节到2048字节的内容。
链接:
提取码:dfsm
Python 编程高手之路。本课程分五个阶段,详细的为您打造高手之路,本课程适合有一定python基础的同学。
用Python可以做什么?可以做日常任务,比如自动备份你的MP3;可以做网站,很多著名的网站就是Python写的。总之就是能干很多很多事。
课程目录:
第一阶段
第一章:用户交互
第二章:流程控制
第三章:数据类型
第四章:字符编码
第五章:文件处理
第二阶段
第六章:函数概述
第七章:闭包函数
......