Django api вызов функции асинхронно
У меня три сервера.
Сервер A: звонит на сервер B, когда произошло какое-то событие (отправляет информацию на B)
Сервер B (Django API Server): Используя информацию из A, вызовите api сервера C.
Сервер C (сервер машинного API): Создаст задачу, следуя информации, которую сервер B отправит ему.
Я работаю на сервере B, потому что нам нужен api сервер и данные в середине сервера A и нашей машины (сервер C)
Работа моего Django api сервера (сервер B) заключается в следующем
async def check_status(token, taskUuid):
def call():
res = requests.get(URL+"task/"+taskUuid, headers={
"accessToken": token
}, verify=False)
return res.json()
while True:
time.sleep(1)
res_json = call()
if res_json['status'] != 'RunningTask':
print(res_json)
#
# do something that store info in the database
#
break
@list_route(methods=['post'])
def post_api(self, request):
task_config = { 'info': request.data['info'] }
if 'optionInfo' in request.data:
task_config['optionInfo'] = request.data['optionInfo']
USERNAME="username"
PASSWORD="password"
URL="https://{machine_ip}/"
login_res = requests.post(URL+"auth", json={
"username": USERNAME,
"password": PASSWORD
}, verify=False)
login_json = login_res.json()
token=login_json['AccessToken']
## token
task_res = requests.post(URL+"task", headers={
"contentType": "application/json",
"accessToken": token
}, json=task_config, verify=False)
task_json = task_res.json()
if task_json['status'] == 'RunningTask':
taskUuid = task_json['uuid']
## My question is here
asyncio.run(check_status(token, taskUuid))
result = {
task_created: 'success'
}
return Response(result, status=status.HTTP_200_OK)
else:
result = {
task_created: 'failed'
}
return Response(result, status=status.HTTP_200_OK)
Я пытался использовать asyncio, но кажется, что это не то, что я хочу.
Вопрос в том, что я хочу сделать asyncio.run(check_status(token, taskUuid)) независимым с потоком функций...
То есть когда я вызвал asyncio.run(check_status(token, taskUuid)), запускается другой поток, и я могу напрямую вернуть Server A результат создания задачи на Server C.
Я хочу, чтобы check_status мог выполняться независимо и возвращать ответ серверу A до того, как check_status завершится.