2017-03-26 9 views
0

다음 작업을 수행하려고합니다. 페이지에서 일부 정보를 가져 와서 mongodb에 삽입하십시오. 페이지 목록이 있으며 이러한 페이지를로드하는 데 시간이 걸릴 수 있으므로 다중 처리를 원합니다. webdriver가 결과를 반환하면 DB에 삽입하려고합니다. 내가 직면하고있는 문제는 DB에서 기대하는 결과의 1/4 만 얻고 있기 때문에 결과를 관리하는 방식을 상상하고 삽입이 작동하지 않는다는 것을 상상해보십시오. 누군가 내가 잘못한 곳을 보여줄 수 있기를 바랬습니다. 가능성이다중 처리 파이썬 pymongo

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

당신이 원하는 :

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.insert(result) 

또는 :

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

"필터"는 MongoDB 쿼리입니다 (Pyth on dict)를 사용하여 업데이트하거나 작성하려는 문서와 고유하게 일치합니다.