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