多处理python-pymongo

多处理python-pymongo,python,mongodb,selenium,pymongo,Python,Mongodb,Selenium,Pymongo,我试图做以下工作:从页面上获取一些信息,然后将其插入mongodb。这里有一个页面列表,我想进行多处理,因为这些页面可能需要时间加载。一旦webdriver返回了我想要插入数据库的结果。我面临的问题是,我只得到了我在数据库中期望的结果的1/4,所以我想象我管理结果的方式和插入不起作用。我希望有人能告诉我哪里出了问题。以下是代码示例: from multiprocessing.dummy import Pool from multiprocessing import cpu_count from

我试图做以下工作:从页面上获取一些信息,然后将其插入mongodb。这里有一个页面列表,我想进行多处理,因为这些页面可能需要时间加载。一旦webdriver返回了我想要插入数据库的结果。我面临的问题是,我只得到了我在数据库中期望的结果的1/4,所以我想象我管理结果的方式和插入不起作用。我希望有人能告诉我哪里出了问题。以下是代码示例:

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) 

此语法不正确:

db.restaurants.update(result,{"upsert":"True"})
你可能想要:

db.restaurants.insert(result)
或:


其中“filter”是一个MongoDB查询(表示为Python dict),它唯一地匹配您要更新或创建的文档。

您是否检查了所有正在抓取的页面是否返回了数据?可能只有1/4的循环实际返回了任何内容。是的,如果我按顺序使用for循环刮取它,我将得到完整的结果
db.restaurants.update(filter, result, upsert=True)