使用asyncio在后台执行批量插入

时间:2017-01-03 11:08:55

标签: python mongodb python-asyncio

您好我使用本地协程,asyncio motor客户端使用python访问mongo db。我的问题场景是调用insert函数并获取future对象,使用这个返回的future对象来确定发送成功响应说200或失败响应说400.稍后db中的插入应该在后台发生。我希望它能通过事件循环来完成,但我无法为它找到合适的解决方案。

@post(_path="/insert",_types=[TestRequest],
                    _consumes=Config.APPLICATION_JSON,
                     _produces=Config.APPLICATION_JSON)
def insertManyDocuments(self,test_req):
    try:
        collection_name='mycoll'
        documents_to_insert=[]
        for i in test_req:
            documents_to_insert.append(i.__dict__)
        future_obj=    self.xyz.insertMany(collection_name,documents_to_insert)
        status=Status()
        if future_obj is None:
            status.status_code=404
        else:
            status.status_code=202
        return status
    except Exception:
        raise Exception
#below code exists in another python file
async def insertMany(self,collection_name,documents_to_insert):
    try:
        collection=self.database[collection_name]
        self.future_obj = collection.insert_many(documents_to_insert)
        t=Timer(120.0,self.insertManyFn)
        t.start()
        return self.future_obj
    except Exception:
        raise
def insertManyFn(self):
    try:
        loop=asyncio.get_event_loop()
        loop.run_until_complete(self.future_obj)
        loop.close()
    except Exception:
        raise

0 个答案:

没有答案