Django视图中的Python Asyncio [英] Python Asyncio in Django View
本文介绍了Django视图中的Python Asyncio的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想同时从Django视图上的API发出两个POST请求。
这就是我在django之外执行的操作。 / p>
导入异步
语音识别为sr
异步def main(语言1,语言2):
loop = asyncio.get_event_loop()
r = sr.Recognizer()
,其中sr.AudioFile(path.join(os.getcwd(), audio.wav))作为来源:
音频= r.record(源)
def reco_ibm(lang):
return(r.recognize_ibm(音频,键,秘密语言= lang,show_all = True))
future1 = loop.run_in_executor(无,reco_ibm,str(语言1))
future2 = loop.run_in_executor(无,reco_ibm,str(语言2))
response1 =等待Future1
response2 =等待future2
loop = asyncio.get_even_loop()
loop.run_until_complete(main( en-US, es-ES))
我对事件循环感到困惑。如何在Django视图中执行此操作?我是否需要为此使用嵌套函数?
def ibmaudio_ibm(request,language1,language2):
#Asyncio在这里编码
编辑:这甚至被认为是重复的吗?
解决方案
解决方案是将函数嵌套在另一个函数中。
解决方案
解决方案是将函数嵌套在另一个函数中。
p> def djangoview(request,language1,language2):
异步def main(language1,language2):
循环= asyncio.get_event_loop()
r = sr.Recognizer()
,其中sr.AudioFile(path.join(os.getcwd(), audio.wav))作为来源:
音频= r.record(源)
def reco_ibm(lang):
return(r.recognize_ibm(音频,键,秘密语言= lang,show_all = True))
future1 = loop.run_in_executor (无,reco_ibm,str(语言1))
future2 = loop.run_in_executor(无,reco_ibm,str(语言2))
response1 =等待Future1
response2 =等待Future2
循环= asyncio.new_event_loop()
asyncio.set_event_loop(loop)
loop = asyncio.get_event_loop()
loop.run_until_comple te(main(language1,language2))
loop.close()
return(HttpResponse)
I would like to make two POST requests from an API on a Django view at the same time.
This is how I would do it outside of django.
import asyncio
import speech_recognition as sr
async def main(language1, language2):
loop = asyncio.get_event_loop()
r = sr.Recognizer()
with sr.AudioFile(path.join(os.getcwd(), "audio.wav")) as source:
audio = r.record(source)
def reco_ibm(lang):
return(r.recognize_ibm(audio, key, secret language=lang, show_all=True))
future1 = loop.run_in_executor(None, reco_ibm, str(language1))
future2 = loop.run_in_executor(None, reco_ibm, str(language2))
response1 = await future1
response2 = await future2
loop = asyncio.get_even_loop()
loop.run_until_complete(main("en-US", "es-ES"))
I'm confused about the event loop. How can I do this inside my Django view? Do I need to use nested functions for this?
def ibmaudio_ibm(request, language1, language2):
#Asyncio code here
Edit: How is this even considered a duplicate? Parallel calls and schedulling with crontab are completely different things...
解决方案
Solution was to nest the function inside another one.
def djangoview(request, language1, language2):
async def main(language1, language2):
loop = asyncio.get_event_loop()
r = sr.Recognizer()
with sr.AudioFile(path.join(os.getcwd(), "audio.wav")) as source:
audio = r.record(source)
def reco_ibm(lang):
return(r.recognize_ibm(audio, key, secret language=lang, show_all=True))
future1 = loop.run_in_executor(None, reco_ibm, str(language1))
future2 = loop.run_in_executor(None, reco_ibm, str(language2))
response1 = await future1
response2 = await future2
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
loop = asyncio.get_event_loop()
loop.run_until_complete(main(language1, language2))
loop.close()
return(HttpResponse)
这篇关于Django视图中的Python Asyncio的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文