Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 带有urllib的Pool.map()(没有多处理?)_Python_Multithreading_Urllib_Pool_Steam - Fatal编程技术网

Python 带有urllib的Pool.map()(没有多处理?)

Python 带有urllib的Pool.map()(没有多处理?),python,multithreading,urllib,pool,steam,Python,Multithreading,Urllib,Pool,Steam,我试图从steam下载大约150个xml文件,并将它们保存到不同的文件中。现在,由于我以前尝试的任何方法都需要大约5分钟的时间,我在这里找到了一个解决方案,指出pool.map应该可以使用。 所以我在下面的代码中使用它。问题是,它仍然需要大约5分钟,所以我怀疑我是否做错了什么。似乎这些文件还没有被下载。我在python线程方面确实遇到了一些问题,仍然不知道如何正确地使用它,仍然没有达到我想要的目标。文件大小不超过5kb。 我认为urllopen已经花费了太多的时间,但这是我想用线程解决的问题。

我试图从steam下载大约150个xml文件,并将它们保存到不同的文件中。现在,由于我以前尝试的任何方法都需要大约5分钟的时间,我在这里找到了一个解决方案,指出pool.map应该可以使用。 所以我在下面的代码中使用它。问题是,它仍然需要大约5分钟,所以我怀疑我是否做错了什么。似乎这些文件还没有被下载。我在python线程方面确实遇到了一些问题,仍然不知道如何正确地使用它,仍然没有达到我想要的目标。文件大小不超过5kb。 我认为urllopen已经花费了太多的时间,但这是我想用线程解决的问题。 (我取出了url字符串,因为它们是由大量字符串构建的,但假设我想下载100-150个不同的文件

所以我要问的是:我在这里做错了什么吗?如果没有,还有什么其他原因,这不起作用,或者有没有更好的解决方案来实现同时下载大约150个文件? 提前谢谢

from multiprocessing import Pool
import urllib

def job(url):

    file_name = time.strftime("%d_%m_%Y_%H_%M_%S")+".xml"
    u = urllib.request.urlopen(url)
    f = open(file_name, 'wb')
    f.write(u.read())
    f.close()


def pool_job():
    pool = Pool()
    urls=[0]*150
    pool.map(job,urls)

我会将
f.write(u.read())
更改为不需要立即将整个下载的文件加载到内存中的内容,然后一次写入磁盘,可能是
f.writelines(u)
?但很可能代码执行时间不是瓶颈,您是否检查过它是否以最大的internet下载速度下载?您的硬盘是否可能写得比现在快?这些可能是导致程序速度减慢的原因。我已经测试过了。以前它甚至更慢。我正在运行此脚本并将文件下载到12 Mbit的ssd。当下载这些小文件时,下载速度不会提高到12,但这里的问题是,这不能同时工作,这与我使用pool.map所期望的不一样