【问题标题】:How to make a asynchronous post request with flask [duplicate]如何使用烧瓶进行异步发布请求[重复]
【发布时间】:2019-10-29 19:51:42
【问题描述】:

我需要发出一个将参数传递给另一个函数的发布请求。问题是这个函数需要很长时间来处理,并且请求最终会导致超时。我想创建一个异步调用来初始化函数,以便即使在发布请求结束后它也能继续在后台执行。

class Assincrono(Resource):
    ''' make a assyncronous post request '''

    async def post(self):
        async with aiohttp.ClientSession() as session:
            with session.post('localhost:5000/classificator/') as resp:
                return await resp.text()

class TrainResource(Resource):
    ''' route /classificator'''

    def post(self):
        content = request.json
        result = ServiceModel().decision(content)
        if result['status'] == 'error':
            return Response(json.dumps(result), status=400, mimetype='application/json')
        return Response(json.dumps(result), status=201, mimetype='application/json')


错误:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>

<head>
    <title>TypeError: Object of type 'coroutine' is not JSON serializable // Werkzeug Debugger</title>

【问题讨论】:

  • 实际上,标记为重复的解决方案并没有解决我的问题。我必须创建一个脚本来执行子进程。

标签: flask request timeout coroutine python-asyncio


【解决方案1】:

在 Flask 中处理异步请求的典型方式是使用消息队列,例如 Redis(例如 rq)。您可以根据需要将任务添加到队列中,并有一个工作进程将它们拉下来并在闲暇时处理它们。 Miguel Grinberg 在他的博客上有一个excellent post,解释了如何实现这一点,并附有大量代码示例。

【讨论】:

    猜你喜欢
    • 2021-12-30
    • 2014-07-23
    • 1970-01-01
    • 2022-01-25
    • 2019-01-05
    • 2017-09-22
    • 2022-07-06
    • 1970-01-01
    • 2015-03-10
    相关资源
    最近更新 更多