multiprocessing python pymongo



我正在尝试执行以下操作:从页面上获取一些信息,然后将其插入到mongodb中。有一个页面列表,我想进行多处理,因为这些页面可能需要一些时间来加载。一旦网络驱动程序返回结果,我想插入到数据库中。我面临的问题是,我在数据库中只得到了我期望的结果的 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)

或:

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

其中"filter"是一个MongoDB查询(表示为Python dict(,它唯一匹配你想要更新或创建的文档。

最新更新