Как заставить команду curl выполняться асинхронно в CircleCI

#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 во время выполнения этого вызова.