2013-02-13 43 views
0

我试图从两个网站下载多个图像文件,并且正在使用多处理模块进行操作,希望能够缩短所需的时间(同步时间约为五分钟)。这是代码是一个独立进程中执行:将下载的文件存储在内存中

def _get_image(self): 
     if not os.path.isdir(self.file_path + self.folder): 
      os.makedirs(self.file_path + self.folder) 

     rand = Random() 
     rand_num = rand.randint(0, sys.maxint) 
     self.url += str(rand_num) 
     opener = urllib.FancyURLopener() 
     opener.retrieve(self.url, self.file_path + self.folder + '/' + str(rand_num) + '.jpg') 

上面的代码是在单独的进程执行和工作正常,但我想它不保存每个文件它的下载之后,但在最后的流程执行。下载后,我希望将它们存储在内部列表或字典中......不幸的是,FancyURLopener不允许将文件存储在内存中,并且坚持在下载后立即将它们写入磁盘。是否有像FancyURLopener这样的工具,但没有磁盘写入?

+0

考虑使用[requests](http://docs.python-requests.org/en/latest/user/quickstart/) – mlt 2013-02-13 19:28:44

回答

1

URLopener.open()返回文件样。你可以read()它作为一个字节字符串来检索数据,然后将其存储到任何你想要的地方。

为什么首先需要URLopener?简单的urllib2.urlopen()怎么样?

+0

我使用FancyURLopener是因为它'处理404'的花哨部分,等等,但现在你的答案会做。也许以后我会继承FancyURLopener的子类并重写它的检索方法,以便将字节字符串存储在内存中,而不是将它们保存到磁盘。谢谢! – 2013-02-13 20:24:15