2017-03-26 14 views
0

私は次のことをしようとしています。ページからいくつかの情報を取得し、それをmongodbに挿入します。ページの一覧があり、これらのページが読み込まれるまでに時間がかかる可能性があるため、マルチプロセッシングを行いたいと思っています。 webdriverが結果を返すと、私はdbに挿入したい。私が直面している問題は、私がDBで期待している結果の1/4しか得ていないことです。その結果を管理し、挿入がうまくいかないと想像しています。誰かが私が間違っている場所を私に見せることを望んでいた。以下はコードの例です:マルチプロセッシングpython pymongo

from multiprocessing.dummy import Pool 
from multiprocessing import cpu_count 
from selenium import webdriver 
import timeit 
from pymongo import MongoClient 
def mp_worker(urls): 

    driver = webdriver.Chrome(chromedriver, 
      chrome_options=options) 
    url = "http://website"+urls 
    driver.get(url) 

    return what_you_want 

    driver.quit() #do I do this here, close or quit? 

def mp_handler(): 
    urls= ["14360705","4584061","13788961","6877217","13194596","13400479","9868014","8524704","16394198","16315464"] 
    client = MongoClient() 
    db = client.test 
    collection = db['test-collection'] 

    p = Pool(cpu_count()*2) 
    for result in p.imap(mp_worker, urls): 
     db.restaurants.update(result,{"upsert":"True"}) 

if __name__=='__main__': 
    start = timeit.default_timer() 
    mp_handler() 
    stop = timeit.default_timer() 
    print (stop - start) 
+0

撤去しているすべてのページがデータを返すことを確認しましたか?それらの1/4だけが実際に何かを返すかもしれない。 – elena

+0

はい私はそれを巡回するためにforループを使用して私が完全な結果を得る – FancyDolphin

答えて

0

この構文が正しくありません:

db.restaurants.update(result,{"upsert":"True"}) 

あなたはおそらく、欲しい:

db.restaurants.insert(result) 

または:

db.restaurants.update(filter, result, upsert=True) 

"filter"はMongoDBクエリです(Pyth on dict)を使用して、更新または作成する文書と一意に一致します。

関連する問題