class ResultPersistenceHelper(MongoMixin): def __init__(self, function_result_status_persistance_conf, queue_name): self.function_result_status_persistance_conf = function_result_status_persistance_conf if self.function_result_status_persistance_conf.is_save_status: task_status_col = self.mongo_db_task_status.get_collection( queue_name) # params_str 如果很长,必须使用TEXt或HASHED索引。 task_status_col.create_indexes([ IndexModel([("insert_time_str", -1)]), IndexModel([("insert_time", -1)]), IndexModel([("params_str", pymongo.TEXT)]), IndexModel([("success", 1)]) ], ) task_status_col.create_index( [("utime", 1)], expireAfterSeconds=function_result_status_persistance_conf. expire_seconds) # 只保留7天。 self._mongo_bulk_write_helper = MongoBulkWriteHelper( task_status_col, 100, 2) self.task_status_col = task_status_col def save_function_result_to_mongo( self, function_result_status: FunctionResultStatus): if self.function_result_status_persistance_conf.is_save_status: item = function_result_status.get_status_dict() item2 = copy.copy(item) if not self.function_result_status_persistance_conf.is_save_result: item2['result'] = '不保存结果' self._mongo_bulk_write_helper.add_task( InsertOne(item2)) # 自动离散批量聚合方式。
def __init__(self, function_result_status_persistance_conf, queue_name): self.function_result_status_persistance_conf = function_result_status_persistance_conf if self.function_result_status_persistance_conf.is_save_status: task_status_col = self.mongo_db_task_status.get_collection(queue_name) task_status_col.create_indexes([IndexModel([("insert_time_str", -1)]), IndexModel([("insert_time", -1)]), IndexModel([("params_str", -1)]), IndexModel([("success", 1)]) ], ) task_status_col.create_index([("utime", 1)], expireAfterSeconds=function_result_status_persistance_conf.expire_seconds) # 只保留7天。 self._mongo_bulk_write_helper = MongoBulkWriteHelper(task_status_col, 100, 2)