2017-06-23 6 views
0

私は約50件のウィキペディアのページを検索しようとしています。私はリクエストパッケージを使ってGET要求を行ってきましたが、パフォーマンスがはるかに高いと聞いてgrequestsの実装に取り​​組んできました。Wikipedia Queries + Grequests

性能の向上は、私にとっては非常に非常に小さいです。私は何か間違っているのですか?

import requests 
import grequests 
from urllib.parse import quote 
from time import time 

url = 'https://en.wikipedia.org/w/api.php?action=query&titles={0}&prop=pageprops&ppprop=disambiguation&format=json' 
titles = ['Harriet Tubman', 'Car', 'Underground Railroad', 'American Civil War', 'Kate Larson'] 
urls = [url.format(quote(title)) for title in titles] 

def sync_test(urls): 
    results = [] 
    s = time() 
    for url in urls: 
     results.append(requests.get(url)) 
    e = time() 
    return e-s 

def async_test(urls): 
    s = time() 
    results = grequests.map((grequests.get(url) for url in urls)) 
    e = time() 
    return e-s 

def iterate(urls, num): 
    sync_time = 0 
    async_time = 0 
    for i in range(num): 
     sync_time += sync_test(urls) 
     async_time += async_test(urls) 
    print("sync_time: {}\nasync_time: {}".format(sync_time, async_time)) 

出力: SYNC_TIME:8.945282936096191 async_time:7.97578239440918

ありがとう!

+0

ここに何の問題が表示されません。あなたは 'grequests'対'要求 'のパフォーマンスの一般的な分析をしたいのですか?あなたが何か「聞いた」ためにあなたのプログラムを何倍にするか?あなたが数万人を処理する予定がない限り、50ページ分の8秒が私には適切なパフォーマンスに見えます。 –

+0

ウィキペディアのボットを書く専用のライブラリもありますが、ここではホイールを改造しないほうが良いかもしれません。 –

答えて

0
import requests 
import grequests 
from urllib.parse import quote 
from time import time 

url = 'https://en.wikipedia.org/w/api.php?action=query&titles={0}&prop=pageprops&ppprop=disambiguation&format=json' 
titles = ['Harriet Tubman', 'Car', 'Underground Railroad', 'American Civil War', 'Kate Larson'] 
urls = [url.format(title) for title in titles] 

def sync_test(urls): 
    results = [] 
    s = time() 
    for url in urls: 
     results.append(requests.get(url)) 
    e = time() 
    return e-s 

def async_test(urls): 
    s = time() 
    results = grequests.map((grequests.get(url) for url in urls)) 
    e = time() 
    return e-s 

def iterate(urls, num): 
    sync_time = 0 
    async_time = 0 
    for i in range(num): 
     sync_time += sync_test(urls) 
     async_time += async_test(urls) 
    print("sync_time: {}\nasync_time: {}".format(sync_time, async_time)) 

if __name__ == '__main__': 
    iterate(urls,10) 

これは私が得られます。

sync_time: 22.14458918571472 
async_time: 4.846134662628174 

Process finished with exit code 0 

私はここに何の疑問を見ていない