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

# 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()

 

posted @ 2021-05-24 18:44  不可描述的细节  阅读(183)  评论(0编辑  收藏  举报