Python - 使用多处理/多线程进行Web报废

时间:2017-11-15 12:04:29

标签: multithreading python-3.x web-scraping multiprocessing runtime-compilation

我正在使用维基百科python包来抓取特定主题的数据

q=['NASA', 'NASA_insignia', 'NASA_spinoff_technologies', 'NASA_facilities', 'NASA_Pathfinder', 'List_of_NASA_missions', 'Langley_Research_Center', 'NASA-TLX', 'Budget_of_NASA', 'NASA_(disambiguation)']

上面的例子,我搜索过NASA。现在我需要获取列表中每个元素的摘要。

ny = []
for i in range(len(q)):
    y = wikipedia.page(q[i])
    x = y.summary
    ny.append(x)

在完成整个过程,即遍历列表的每个元素并检索每个元素的摘要时,整个过程需要大约40-60秒才能完成(即使网络连接良好)

我对多处理/多线程知之甚少。如何在相当长的时间内加快执行速度?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

您可以使用处理池(请参阅documentation)。

以下是基于您的代码的示例:

from multiprocessing import Pool


q = ['NASA', 'NASA_insignia', 'NASA_spinoff_technologies', 'NASA_facilities', 'NASA_Pathfinder',
     'List_of_NASA_missions', 'Langley_Research_Center', 'NASA-TLX', 'Budget_of_NASA', 'NASA_(disambiguation)']

def f(q_i):
    y = wikipedia.page(q_i)
    return y.summary

with Pool(5) as p:
    ny = p.map(f, q)

基本上f适用于q中不同进程中的每个元素。 您可以在定义池时确定进程数(在我的示例中为5)。