Asyncio.create_subprocess_exe c NotImplementedError - Фоновое задание Fastapi - PullRequest
0 голосов
/ 05 февраля 2020

Я пытаюсь вызвать asyncio.create_subprocess_exec в фоновой задаче Fastapi, но она продолжает поднимать NotImplementedError. Функция run_subprocess прекрасно работает, когда она запускается за пределами Fastapi. Я запускаю это в windows используя asyncio l oop, а не uvl oop.

import asyncio
from fastapi import FastAPI, BackgroundTasks

DHCP_SERVER = "1.1.1.1"

app = FastAPI()

@app.get("/")
async def subprocess_test(background_tasks: BackgroundTasks):
  background_tasks.add_task(run_subprocess)

async def run_subprocess():
  proc = await asyncio.create_subprocess_exec(
    'powershell.exe',
    f'Get-Dhcp-Serverv4Scope -ComputerName \"{DHCP_SERVER}\"',
    stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE
  )

  stdout, stderr = await proc.communicate()

  if stderr:
    print(stderr)
  else:
    print(stdout)


File ".\subprocess_example.py", line 13 in run_subprocess
  proc = await asyncio.create_subprocess_exec(
File "C:\Python\Python38-32\lib\asyncio\subprocess.py", line 236, in create_subprcess_exec
  transport, protocol = await loop.subprocess_exec(
File "C:\Python\Python38-32\lib\asyncio\base_events.py", line 1615, in subprocess_exec
  transport = await self._make_subprocess_transport(
File "C:\Python\Python38-32\lib\asyncio\base_events.py", line 487, in _make_subprocess_transport
  raise NotImplementedError

Может кто-нибудь, пожалуйста, помогите исправить это?

Спасибо!

1 Ответ

0 голосов
/ 05 февраля 2020

Я полагаю, что эта ошибка вызвана тем, что fastapi использует uvl oop, и asyncio не знает об этом без установки политики, есть ответ, который предоставляет несколько способов, как этого добиться;

событие asyncio l oop эквивалентно uvl oop

...