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