#python #asynchronous #curl #fastapi #circleci
Вопрос:
Я делаю вызов API, который находится в пределах одного из шагов задания CircleCI. Однако выполнение этого вызова занимает много времени, и в моем рабочем процессе есть другие шаги/задания, которые не зависят от результатов этого вызова.
В качестве примера, вот как config.yml
выглядит мой for CircleCI.
job_one:
steps:
- checkout
- run:
name: Call API
command: |
curl -Lso /dev/null 'http://my_api.com/endpoint'
echo "Doing other stuff here"
job_two:
steps:
- checkout
- do_more_stuff
workflows:
my_workflow:
jobs:
- job_one
- job_two
API, который я вызываю, создан с помощью FastAPI. Я знаю, что вы можете определить конечные точки следующим образом:
@app.get("/endpoint")
async def endpoint():
result = await some_library()
# some other code
return results
Но я думаю, что это только заставляет код в конечной функции выполняться асинхронно. Это означает, что он может работать # some other code
, пока мы ждем возвращаемого значения some_library()
.
Что я хочу сделать, так это сделать так, чтобы вызов самого API выполнялся асинхронно. Мое первоначальное решение состояло в том, чтобы сделать это (возвращаясь к приведенному выше примеру).:
job_one:
steps:
- checkout
- run:
name: Call API
command: |
curl -Lso /dev/null 'http://my_api.com/endpoint' amp;
echo "Doing other stuff here"
Обратите внимание на добавленное amp;
в конце команды curl. Однако, когда я поднял этот вопрос, кто-то сказал, что это сделает его скорее фоновым процессом, чем асинхронным вызовом.
Мне трудно понять разницу между этими двумя вещами, а также то, как правильно выполнить асинхронный вызов в этом случае, чтобы я мог перейти к другим процессам CircleCI во время выполнения этого вызова.