1

情報を得るためにウェブサイトをスクレイピングしていますが、各ページでも利用できる翻訳されたページから情報を取得したいと考えています。

そのため、適切なページに移動して翻訳された情報を取得する関数を作成しました。唯一の問題は、最初にフランス語、次にイタリア語、次にドイツ語、次にスペイン語、そして英語に到達するまで待たなければならないことです...一度にすべて取得したい.

英語版でサイトをクロールしていて、目的のページにたどり着いたら並行処理したい。スクレイパーのスクリプト全体をマルチプロセスする方法についてはたくさん読んだことがありますが、ボトルネックがある場所であるため、スクレイプのこの時点でマルチプロセスを実行したいだけです。現時点でのその部分のコードは次のようになります。

lang = soup.find('div',{'id':'language-config'})
try: 
    french = translator(lang,language='Français')
    italian = translator(lang,language='Italiano')
    german = translator(lang,language='Deutsch')
    spanish = translator(lang,language='Español')
    english = translator(lang,language='English')

可能であれば、関数の 5 つのインスタンスを同時に起動したいですか? ひらめいた瞬間がなかったので、おそらく単純です。

4

2 に答える 2

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)
于 2015-10-10T12:20:49.037 に答える
0

新しいasyncio ライブラリを試してください。putデコレータでメソッドwrapper_translatorの出力を返すラッパーを作成します。translator@asyncio.coroutine

于 2015-09-15T22:57:06.140 に答える