簡體   English   中英

Asyncio.create_subprocess_exec NotImplementedError - Fastapi 后台任務

[英]Asyncio.create_subprocess_exec NotImplementedError - Fastapi Background Task

我試圖在 Fastapi 后台任務中調用asyncio.create_subprocess_exec ,但它不斷引發NotImplementedError run_subprocess 函數在 Fastapi 之外運行時可以正常工作。 我在 Windows 中使用 asyncio 循環而不是 uvloop 運行它。

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

任何人都可以幫忙解決這個問題嗎?

謝謝!

我相信觸發這個錯誤是因為 fastapi 使用 uvloop 並且 asyncio 在沒有設置策略的情況下不知道這一點,有一個答案提供了一些如何實現這一點的鈎子;

與 uvloop 等效的異步事件循環

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM