将下载的文件存储在内存中

时间:2013-02-13 19:13:31

标签: python multiprocessing urllib2

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

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')

上面的代码在不同的进程中执行并且工作正常,但我希望它不是在下载后立即保存每个文件,而是在流程执行结束时。下载后,我希望它们存储在一些内部列表或dict中......可悲的是,FancyURLopener不允许将文件存储在内存中,并坚持在下载后立即将它们写入磁盘。是否有像FancyURLopener这样的工具,但没有磁盘写入?

1 个答案:

答案 0 :(得分:1)

URLopener.open()返回类似文件。您可以read()将其作为字节字符串检索数据,然后将其存储在任何您想要的位置。

为什么首先需要URLopener?如何简单urllib2.urlopen()