Django视图中的Python Asyncio [英] Python Asyncio in Django View

查看:88
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆