在使用Python 3进行抓取时,如何同时启动5个url的功能

时间:2015-09-15 22:12:35

标签: python python-multiprocessing concurrent.futures

我正在抓取一个网站以获取信息,并希望从每个页面可用的翻译页面中获取一些信息。

所以我编写了一个函数来转到相应的页面并获取翻译的信息。唯一的问题是我必须等待,首先它击中法语,然后是意大利语,然后是德语,然后是西班牙语,然后是英语......我想立刻得到它们。

我正在使用英文版抓取网站,然后当我到达目标网页时,我想要同时处理。我已经阅读了很多关于如何为刮刀多个处理整个脚本的内容,但我只是希望它在刮擦的这一点上这样做,因为它是瓶颈所在。以下是该部分代码的内容:

-- Create a holding table 

SELECT * INTO Holding_Table
FROM Your_View
WHERE 1 = 2




-- Procedure to populate data into that holding table

CREATE PROCEDURE populate_data 
AS
BEGIN
  TRUNCATE TABLE Holding_Table  

  INSERT INTO Holding_Table
  SELECT * FROM Your_View

END

我想在可能的情况下同时触发该功能的五个实例?可能很简单,只是没有灯泡时刻。

2 个答案:

答案 0 :(得分:0)

尝试新的asyncio library。制作一个wrapper_translator包装器,在translator装饰器放置时返回@asyncio.coroutine方法的输出。

答案 1 :(得分:0)

这很简单,只需使用concurrent.futures即可。由于您的任务是IO绑定的,ThreadPoolExecutor就足够了。

languages = ('Français', 'Italiano', 'Deutsch', 'Español', 'English')

with ThreadPoolExecutor(max_workers=5) as executor:
    for language in languages:
        executor.submit(translator, lang, language=language)