首页 > 数据库技术 > 详细

线程锁实现多线程读取mongo 数据库库

时间:2021-05-24 22:24:46      阅读:13      评论:0      收藏:0      [点我收藏+]
# encoding:utf-8
import threading
import pymongo
import redis
from bson import ObjectId

limit_page = 1000
lock = threading.Lock()


class Up:
    def __init__(self):
        self.LastId = ‘‘
        self.startClient = pymongo.MongoClient(192.168.1.50).TianYan.ShangBiao_old
        self.redisclient  = redis.StrictRedis(host=192.168.1.50, db=10)

    def get_mongo_info(self):
        lock.acquire()
        if self.LastId:
            result = self.startClient.find({"_id": {"$gt": ObjectId(self.LastId)}}).limit(limit_page).sort(_id, 1)
        else:
            result = self.startClient.find().limit(limit_page).sort(_id, 1)
        message = list(result)
        try:
            self.LastId = message[-1][_id]
        except:
            print("数据导出完毕")
            return message
        else:
            return message
        finally:
            lock.release()

    def find_info(self):
        while True:
            message = self.get_mongo_info()
            if message ==[]:
                break
            for info in message:
                company_id = info[company_id]
                print(company_id)
                self.redisclient.sadd(trademark, company_id)

    def run(self):
        Threads = []
        for _ in range(50):
            t2 = threading.Thread(target=self.find_info)
            t2.start()
            Threads.append(t2)
        for t in Threads:
            t.join()



if __name__ == __main__:
    up = Up()
    up.run()

 

线程锁实现多线程读取mongo 数据库库

原文:https://www.cnblogs.com/lqn404/p/14805706.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!