У меня есть модель, которая используется для предсказания topi c в тексте, который работает с внешним классом. Учитывая, что процесс реализован на платформе Django, он проходит через завернутую в сельдерей задачу. Таким образом, существует проблема с импортом этого класса. Это задача сельдерея, часть кода удалена из-за неразглашения и не является обязательной для решения
from <Full path> import TopicModel
def process_prediction(data, field, model):
predict_data = []
for doc in data:
predict_data.append(doc.get(field, doc['content']))
prediction = model.predict(predict_data)
for pred, doc in zip(prediction, data):
logger.info("This was predicted {}".format(pred))
if "tags" not in doc:
doc["tags"] = []
doc["tags"].append({"name": pred, "type": "topic"})
return zip(prediction, data)
импорт, и эта функция позже вызывается через задачу и некоторые другие функции:
@app.task(name='<path>', bind=True, base=DatabaseTask)
def top_mod(self, inputf, outputf, extra=None):
self.update_state(state="PROGRESS", meta={'progress': 0})
try:
if extra and extra.get('search_query', ''):
inputf['query'] = extra['search_query']
self.file_asset = FileAssets.get_asset()
self.file_asset.get_file(extra.get('model_filename'))
with open(<PATH.), extra.get('model_filename')), 'rb') as model_filename:
model = pickle.load(model_filename)
loop = asyncio.get_event_loop()
task = loop.create_task(process(inputf, outputf, extra.get('field', 'content'), model, extra.get('threads', 2), extra.get('job_id', '')))
loop.run_until_complete(task)
return True
except Exception as e:
logger.error("Exception occured in run topic. Message: {}".format(str(e)))
job_status = JobStatus(extra.get('job_id'), top_mod.session)
current_state = job_status.read_state()
current_state['status'] = 'error'
current_state['message'] = "Error occured in creating task"
job_status.write_state(current_state)
return False
* Модель 1006 * pkl использует этот класс TopicModel для загрузки файла с pickle. Когда процесс запускается из внешнего интерфейса, возникает ошибка:
AttributeError: Can't get attribute 'TopicModel' on <module 'celery.bin.celery' from...
Возможное решение: я импортировал класс напрямую в корзину сельдерея в среде и работает как чудо, но мне интересно, есть ли другой способ переопределить его через django код, чтобы я не связывался с файлами env.