欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于python3.7利用Motor來異步讀寫Mongodb提高效率(推薦)

 更新時間:2020年04月29日 09:17:50   作者:劉悅的技術(shù)博客  
Motor是一個異步mongodb driver,支持異步讀寫mongodb。它通常用在基于Tornado的異步web服務器中。這篇文章主要介紹了基于python3.7利用Motor來異步讀寫Mongodb提高效率,需要的朋友可以參考下

如果使用Python做大型海量數(shù)據(jù)批量任務時,并且backend用mongodb做數(shù)據(jù)儲存時,常常面臨大量讀寫數(shù)據(jù)庫的情況。尤其是大量更新任務,由于不能批量操作,我們知道pymongo是同步任務機制,相當耗時。

如果采用多線程、多進程的方案確實有效,但編寫麻煩、消耗系統(tǒng)資源大(pymongo還不允許fork線程中共用連接)。這里主要瓶頸在于IO,使用單線程異步操作就會效果很好。

Motor是一個異步mongodb driver,支持異步讀寫mongodb。它通常用在基于Tornado的異步web服務器中。

Motor同時支持使用asyncio(Python3.4以上標準庫)作為異步模型,使用起來十分方便。

我們來測試一下效率,使用傳統(tǒng)pymongo來進行批量讀寫 mongo_test.py:

host = '127.0.0.1'
port = 27017
database = 'LiePin'

import time

start = time.clock()

from pymongo import MongoClient

connection = MongoClient(
 host,
 port
)
db = connection[database]

for doc in db.LiePin_Analysis1.find({}, ['_id', 'JobTitle', 'is_end']):
 db.LiePin_Analysis1.update_one({'_id': doc.get('_id')}, {
  '$set': {
   'is_end': 1
  }
 })

elapsed = (time.clock() - start)
print("Time used:",elapsed)

運行一下,發(fā)現(xiàn)用了4秒左右

再使用motor以異步的形式來編寫腳本 motor_test.py

host = '127.0.0.1'
port = 27017
database = 'LiePin'

import time

start = time.clock()

import asyncio
from motor.motor_asyncio import AsyncIOMotorClient

connection = AsyncIOMotorClient(
 host,
 port
)
db = connection[database]

async def run():
 async for doc in db.LiePin_Analysis1.find({}, ['_id', 'JobTitle', 'is_end']):
  db.LiePin_Analysis1.update_one({'_id': doc.get('_id')}, {'$set': {'is_end':0}})

asyncio.get_event_loop().run_until_complete(run())

elapsed = (time.clock() - start)
print("Time used:",elapsed)

僅僅1秒左右就完成了任務

效率由此可見一斑

到此這篇關(guān)于基于python3.7利用Motor來異步讀寫Mongodb提高效率(推薦)的文章就介紹到這了,更多相關(guān)python異步讀寫Mongodb內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python 腳本死鎖問題與解決方案

    Python 腳本死鎖問題與解決方案

    在腳本中,可以創(chuàng)建一個隊列來存儲子進程的輸出,然后由主進程從隊列中讀取輸出并進行處理,這篇文章主要介紹了Python 腳本死鎖問題與解決方案,需要的朋友可以參考下
    2024-06-06
  • Python實現(xiàn)求解一元二次方程的方法示例

    Python實現(xiàn)求解一元二次方程的方法示例

    這篇文章主要介紹了Python實現(xiàn)求解一元二次方程的方法,涉及Python基于math包進行數(shù)值運算相關(guān)操作技巧,需要的朋友可以參考下
    2018-06-06
  • Python3?Loguru輸出日志工具的使用

    Python3?Loguru輸出日志工具的使用

    使用 Python 來寫程序或者腳本的話,常常遇到的問題就是需要對日志進行刪除。一方面可以幫助我們在程序出問題的時候排除問題,二來可以幫助我們記錄需要關(guān)注的信息,這篇文章主要介紹了Python3?Loguru?相見恨晚的輸出日志工具,需要的朋友可以參考下
    2022-05-05
  • pytorch 使用單個GPU與多個GPU進行訓練與測試的方法

    pytorch 使用單個GPU與多個GPU進行訓練與測試的方法

    今天小編就為大家分享一篇pytorch 使用單個GPU與多個GPU進行訓練與測試的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • 詳解從Django Allauth中進行登錄改造小結(jié)

    詳解從Django Allauth中進行登錄改造小結(jié)

    這篇文章主要介紹了從 Django Allauth 中進行登錄改造小結(jié),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-12-12
  • 深入理解Python中的真值和假值概念

    深入理解Python中的真值和假值概念

    在 Python 中,真值和假值是布爾類型的兩個唯一可能的值,本文將深入探討 Python 中的真值和假值概念,幫助你更好地理解和運用它們,感興趣的可以了解一下
    2023-11-11
  • Python 實現(xiàn)自動登錄+點擊+滑動驗證功能

    Python 實現(xiàn)自動登錄+點擊+滑動驗證功能

    這篇文章主要介紹了Python 實現(xiàn)自動登錄+點擊+滑動驗證功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06
  • python基于?Web?實現(xiàn)?m3u8?視頻播放的實例

    python基于?Web?實現(xiàn)?m3u8?視頻播放的實例

    這篇文章主要介紹了python基于?Web?實現(xiàn)?m3u8?視頻播放的實例的相關(guān)資料,需要的朋友可以參考下
    2023-06-06
  • Pandas篩選DataFrame含有空值的數(shù)據(jù)行的實現(xiàn)

    Pandas篩選DataFrame含有空值的數(shù)據(jù)行的實現(xiàn)

    本文主要介紹了Pandas篩選DataFrame含有空值的數(shù)據(jù)行的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-07-07
  • 如何使用pyinstaller打包32位的exe程序

    如何使用pyinstaller打包32位的exe程序

    這篇文章主要介紹了如何使用pyinstaller打包32位的exe程序,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-05-05

最新評論