urlopenの並列化 python.multiprocessing

複数のurlを開きたいとき,処理が遅くてこまりますよね.
これはwebアプリなんか作っているときにも問題になります.
urlを開く,つまりhttpリクエストを送信する処理を並列でやるモジュールurlmultiを作りました.
まぁそんな大げさなものでもないですが,僕は感動しました.
コードはここに載せておきます.donwload

Source code

from time import time
from multiprocessing import Pool
import requests

def urlopen(url):
    try: return requests.get(url).content
    except: return None

def urlsopen(urls):
    pool = Pool(processes=8)
    return pool.map(urlopen, urls)

if __name__ == '__main__':
    urls = (
        'http://penny-arcade.com/',
        'http://reallifecomics.com/',
        'http://sinfest.net/',
        'http://userfriendly.org/',
        'http://savagechickens.com/',
        'http://xkcd.com/',
        'http://duelinganalogs.com/',
        'http://cad-comic.com/',
        'http://samandfuzzy.com/',
        "http://dvineuncorked.files.wordpress.com/2011/09/orange.jpg",
        )
    print "usual way"
    start = time()    
    try: results = [requests.get(url).content for url in urls]
    except: pass
    end = time()
    print "{0} sec".format(end-start)

    print "using multiprocessing"
    start = time()
    results = urlsopen(urls)
    end = time()
    print "{0} sec".format(end-start)

Result

usual way
13.4048850536 sec
using multiprocessing
1.52488994598 sec

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中