为了账号安全,请及时绑定邮箱和手机立即绑定

python多线程写入文件问题

python多线程写入文件问题

慕粉3184500 2017-03-09 10:59:33
import requests import threading class downloader:     # 构造函数     def __init__(self):         # 设置url         self.url='http://image03.u69cn.com/2013/contentinfo/105379_zi.jpg'         # 设置线程数         self.num=8         # 文件名从url最后取         self.name=self.url.split('/')[-1]         # 用head方式去访问资源         r = requests.head(self.url)         # 取出资源的字节数         self.total = int(r.headers['Content-Length'])         print 'total is %s' % (self.total)     def get_range(self):         ranges=[]         # 比如total是50,线程数是4个。offset就是12         offset = int(self.total/self.num)         for i in  range(self.num):             if i==self.num-1:                 # 最后一个线程,不指定结束位置,取到最后                 ranges.append((i*offset,''))             else:                 # 没个线程取得区间                 ranges.append((i*offset,(i+1)*offset))         # range大概是[(0,12),(12,24),(25,36),(36,'')]         return ranges                      return ranges     def download(self,start,end):         headers={'Range':'Bytes=%s-%s' % (start,end),'Accept-Encoding':'*'}         # 获取数据段         res = requests.get(self.url,headers=headers)         # seek到指定位置         print '%s:%s download success'%(start,end)         self.fd.seek(start)         self.fd.write(res.content)     def run(self):         # 打开文件,文件对象存在self里         self.fd =  open(self.name,'w')         thread_list = []         n = 0         for ran in self.get_range():             start,end = ran             print 'thread %d start:%s,end:%s'%(n,start,end)             n+=1             # 开线程             thread = threading.Thread(target=self.download,args=(start,end))             thread.start()             thread_list.append(thread)         for i in thread_list:             # 设置等待             i.join()         print 'download %s load success'%(self.name)         self.fd.close() if __name__=='__main__':     # 新建实例     down = downloader()     # 执行run方法     down.run()上面这段关于多个线程下载文件的代码,在linux下面运行正常,在windows上跑下载的图片不能正常打开,而且每次下载的图片文件大小都不一样。请问这是为什么呢?除了加锁,windows上有没有其他办法解决?
查看完整描述

目前暂无任何回答

  • 0 回答
  • 2 关注
  • 6083 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信