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中读取和处理100000个URL的最快方法_Python_Multithreading_Http_Concurrency_Multiprocessing - Fatal编程技术网

在Python中读取和处理100000个URL的最快方法

在Python中读取和处理100000个URL的最快方法,python,multithreading,http,concurrency,multiprocessing,Python,Multithreading,Http,Concurrency,Multiprocessing,我有一个包含100000个URL的文件,我需要请求并处理它。与请求相比,处理花费了不可忽略的时间,因此简单地使用多线程似乎只能部分提高速度。从我所读到的内容来看,我认为使用多处理模块或类似的东西可以提供更大的速度提升,因为我可以使用多核。我猜我想使用一些多进程,每个进程都有多个线程,但我不知道如何做到这一点 以下是我当前使用线程的代码(基于): 如果文件不大于可用内存,请使用mmap()而不是使用“open”方法打开它。它将提供与使用内存而不是文件时相同的速度 with open("test.t

我有一个包含100000个URL的文件,我需要请求并处理它。与请求相比,处理花费了不可忽略的时间,因此简单地使用多线程似乎只能部分提高速度。从我所读到的内容来看,我认为使用
多处理
模块或类似的东西可以提供更大的速度提升,因为我可以使用多核。我猜我想使用一些多进程,每个进程都有多个线程,但我不知道如何做到这一点

以下是我当前使用线程的代码(基于):


如果文件不大于可用内存,请使用mmap()而不是使用“open”方法打开它。它将提供与使用内存而不是文件时相同的速度

with open("test.txt") as f:
    mmap_file = mmap.mmap(f.fileno(), 0)
    # code that does what you need
    mmap_file.close()

@Gus您使用并发100不会获得任何加速。它们都在同一时间离开,令人惊讶的是——它们都回来等待操作系统进程。你能做的,是两步走。使用线程(i/o)本地拉取所有内容,然后使用内核*2进行多进程。(或者,你也会有同样的问题)我明白了。所以也许我可以把它分成两个脚本——一个只使用多线程的脚本,并将原始HTML保存到文件中。然后进行另一个多处理,处理文件,然后在完成后删除它们。但不确定这是否是最好的解决方案?我会这么做然后去做否则,您可以切换语言并使用nodejs进行刮取——但这是一个完全不同的过程。该链接具有误导性——它没有说明任何有关HTML处理的内容。使用lxml.html或请求。(如果您知道jquery--pyquery)
with open("test.txt") as f:
    mmap_file = mmap.mmap(f.fileno(), 0)
    # code that does what you need
    mmap_file.close()