from loguru import logger
from concurrent.futures import ThreadPoolExecutor
from flask import Flask, request, jsonify
import requests
from gevent.pywsgi import WSGIServer
import json
import os
from my_project.model import My_model
app = Flask(__name__)
flask_port = 1234
HEADER = {'Content-Type': 'application/json'}
executor_1 = ThreadPoolExecutor(max_workers=5)
executor_2 = ThreadPoolExecutor(max_workers=5)
def run_model(data):
model = My_model(data) # in My_model, loguru is used to log info too.
output = model.main()
return output
def task_callback(future):
result = future.result()
if result['code'] == 200:
dict_data = {
"task_id": result['task_id'],
"data": result['data'],
"success": 1
}
else:
dict_data = dict_data = {
"task_id": result['task_id'],
"data": None,
"success": 0
}
json_data = json.dumps(dict_data, ensure_ascii=True)
back_end_url = "http://123.123.55.65:5588/backend"
response = requests.post(url=back_end_url, headers=HEADER, data=json_data, timeout=None)
logger.debug(f"call_back response text: {response.text}")
logger.remove()
@app.route('/service/model_input', methods=['POST'])
def submit_task():
data = request.json
task_id = data['task_id']
# Name and create log files based on the time the model receives the task and its id.
log_dir = "/app/log"
logger.remove()
logger.add(f"{log_dir}/{{time}}_task_{task_id}.log",
level="DEBUG",
backtrace=True,
diagnose=True
)
os.makedirs(log_dir, exist_ok=True)
platform = data['platform']
if platform == 'platform_a':
future = executor_1.submit(run_model, data)
elif platform == 'platform_b':
future = executor_2.submit(run_model, data)
else:
return jsonify({'status': 'invalid platform',
'taskid': data['task_id'],
'platform': data['platform'],
'code': 400})
future.add_done_callback(task_callback)
return jsonify({'status': 'task recieved', 'taskid': data['task_id'], 'code': 202})
if __name__ == '__main__':
print("Service enabled.")
WSGIServer(('0.0.0.0', flask_port), app).serve_forever()
Когда я инициирую несколько задач, например две задачи от каждой из двух платформ, в результате чего каждый пул потоков получает две задачи, будут созданы четыре журнала. Однако я заметил, что в каждом журнале записывается вся информация о задаче от создания до завершения соответствующей задачи (обычно это занимает около 20 минут). Я хочу, чтобы в каждый журнал записывалась только информация, относящаяся к соответствующему ему идентификатору задачи. Как мне настроить код?
T пытался использовать методbind() для привязки задачи и ее обработчика журнала, но файл журнала все равно записывал всю информацию из всех задач, когда соответствующая ему задача выполнялась.
@app.route('/service/model_input', methods=['POST']) def submit_task(): data = request.json task_id = data['task_id']
# Name and create log files based on the time the model receives the task and its id. log_dir = "/app/log" logger.remove() logger.add(f"{log_dir}/{{time}}_task_{task_id}.log", level="DEBUG", backtrace=True, diagnose=True )
if __name__ == '__main__': print("Service enabled.") WSGIServer(('0.0.0.0', flask_port), app).serve_forever()
[/code] Когда я инициирую несколько задач, например две задачи от каждой из двух платформ, в результате чего каждый пул потоков получает две задачи, будут созданы четыре журнала. Однако я заметил, что в каждом журнале записывается вся информация о задаче от создания до завершения соответствующей задачи (обычно это занимает около 20 минут). Я хочу, чтобы в каждый журнал записывалась только информация, относящаяся к соответствующему ему идентификатору задачи. Как мне настроить код? T пытался использовать методbind() для привязки задачи и ее обработчика журнала, но файл журнала все равно записывал всю информацию из всех задач, когда соответствующая ему задача выполнялась.
Я все еще изучаю о Логору, но я не могу найти простой способ сделать это. Я хочу использовать параметры по умолчанию из Loguru, я считаю, что они великолепны, но я хочу добавить к ней информацию, я хочу добавить IP -адрес запроса, который будет...
Я все еще изучаю о Логору, но я не могу найти простой способ сделать это. Я хочу использовать параметры по умолчанию из Loguru, я считаю, что они великолепны, но я хочу добавить к ней информацию, я хочу добавить IP -адрес запроса, который будет...
Я новичок в Loguru, так что теперь есть проблемы с регистрацией нескольких файлов. Я использовал исходный журнал Python, и мне нужно только определить регистратор только один раз, а затем он может поймать журнал в нескольких файлах, но логору нет. В...
Итак, я попытался использовать Loguru в качестве основной утилиты ведения журнала в моем проекте Django, в основном из -за прохладной и простой реализации ротации журналов файлов. Мои конфигурации регистрации выглядят примерно так:
from loguru...
Я пишу алгоритм, который обнаруживает области смежных пустых ячеек, которые полностью окружены заполненными ячейками и не доходят до края сетки. Назовем такие регионы «пулами».
Как вы можете видеть на приведенной ниже визуализации, существует три...