• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

关于python:pymongo初体验及插入性能测试

python 搞代码 3年前 (2022-02-20) 13次浏览 已收录 0个评论
文章目录[隐藏]

话说

网上的pymongo教程都有点老了,也就菜鸟教程的能够看一看,别的博客什么的就别看了,翻了一堆都是过期的,倡议间接看官网文档,内容不多,上手也很简略。

发现的问题

  • 和网上的用法不同,目前只用MongoClient()一种连贯形式,也不存在safe=true这个参数了,maxPoolSize默认100,能够在连贯时本人设置。
  • 和网上的说法不同,据说插入数据的时候指定_id比不指定更快,理论测试恰恰相反,但差异不大,能指定还是指定
  • logging.info()挺耗时间的,测试插入1万条数据,加这一句耗时16秒左右,不加只用7秒左右

pymongo应用

import requests
from pymongo import MongoClient
import logging
import time
import json
from concurrent.futures import ThreadPoolExecutor

logging.basicConfig(level=logging.DEBUG,
                    format='%(asctime)s  [%(threadName)s]  %(levelname)s: %(message)s')

# 复用连贯,能大幅提高效率
s = requests.Session()
# 批改默认连接数(10),改为20 host,200连接池,http https 别离对应各自类型,只是须要别离设置
s.mount('https://', requests.adapters.HTTPAdapter(pool_connections=20, pool_maxsize=200))
s.mount('http://', requests.adapters.HTTPAdapter(pool_connections=20, pool_maxsize=200))


def getHTML(uid):
    # url = ''
    return uid


def toDB(obj):
    res = obj.result()
    x = collect.insert_one({'_id': res + 20000, 'uid': res})  #   # 加_id貌似更快,网上说的不加更快,都是放屁
    # logging.info(x.inserted_id)


if __name__ == "__main__":
    logging.info('start')
    # client = MongoClient('127.0.0.1', 27017)  # 默认连贯
    client = MongoClient('127.0.0.1', 65500, maxPoolSize=200)  # 200连接数
    db = client['douyin']
    collect = db['user']
    pool = ThreadPoolExecutor()  # 默认为CPU数*5
    t = time.perf_counter()
    for short_id in range(10000):
        pool.submit(getHTML, short_id).add_done_callback(toDB)
    pool.shutdown(wait=True)
    client.close()
    t = time.perf_counter() - t
    print(t)

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:关于python:pymongo初体验及插入性能测试
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址