Python 3.x 在flask(python)中发送post请求时出错
我向函数发送了一个post请求,这是一个协程,但我得到以下错误Python 3.x 在flask(python)中发送post请求时出错,python-3.x,flask,Python 3.x,Flask,我向函数发送了一个post请求,这是一个协程,但我得到以下错误 Traceback (most recent call last): File "/usr/local/lib/python3.4/site-packages/flask/app.py", line 1994, in __call__ return self.wsgi_app(environ, start_response) File "/usr/local/lib/python3.4/site-packag
Traceback (most recent call last):
File "/usr/local/lib/python3.4/site-packages/flask/app.py", line 1994, in __call__
return self.wsgi_app(environ, start_response)
File "/usr/local/lib/python3.4/site-packages/flask/app.py", line 1985, in wsgi_app
response = self.handle_exception(e)
File "/usr/local/lib/python3.4/site-packages/flask/app.py", line 1540, in handle_exception
reraise(exc_type, exc_value, tb)
File "/usr/local/lib/python3.4/site-packages/flask/_compat.py", line 33, in reraise
raise value
File "/usr/local/lib/python3.4/site-packages/flask/app.py", line 1982, in wsgi_app
response = self.full_dispatch_request()
File "/usr/local/lib/python3.4/site-packages/flask/app.py", line 1615, in full_dispatch_request
return self.finalize_request(rv)
File "/usr/local/lib/python3.4/site-packages/flask/app.py", line 1630, in finalize_request
response = self.make_response(rv)
File "/usr/local/lib/python3.4/site-packages/flask/app.py", line 1740, in make_response
rv = self.response_class.force_type(rv, request.environ)
File "/usr/local/lib/python3.4/site-packages/werkzeug/wrappers.py", line 885, in force_type
response = BaseResponse(*_run_wsgi_app(response, environ))
File "/usr/local/lib/python3.4/site-packages/werkzeug/wrappers.py", line 57, in _run_wsgi_app
return _run_wsgi_app(*args)
File "/usr/local/lib/python3.4/site-packages/werkzeug/test.py", line 884, in run_wsgi_app
app_rv = app(environ, start_response)
TypeError: 'generator' object is not callable
下面是提交按钮后调用的函数:
函数f()从get请求获取一些数据,并从响应返回json
@app.route('/submit', methods=['POST'])
@asyncio.coroutine
def submit():
result = yield from f()
return render_template('test.html', result=result)
def f()
response = yield from request('get',...)
....
您不能将协同路由用作Flack路由,这不是Flack或WSGI协议的工作方式。WSGI为每个线程/进程/事件处理一个请求/响应。如果您需要执行后台任务,请生成一个线程或使用类似芹菜的任务队列 您可以将包含生成器的响应返回给。但它仍将在一个线程中同步运行
def stream():
yield 'thing one'
yield from other_thing()
yield 'thing two'
return current_app.response_class(stream())
如果使用gevent,则可以处理每个请求,在这种情况下,可以生成其他eventlet。这会带来自身的性能问题,因为所有eventlet都在一个线程中循环运行(asyncio也是如此)。Gunicorn也支持aiohttp,但Flask不支持,尽管可以让它工作。您不能将协同路由用作Flask路由,这不是Flask或WSGI协议的工作方式。WSGI为每个线程/进程/事件处理一个请求/响应。如果您需要执行后台任务,请生成一个线程或使用类似芹菜的任务队列 您可以将包含生成器的响应返回给。但它仍将在一个线程中同步运行
def stream():
yield 'thing one'
yield from other_thing()
yield 'thing two'
return current_app.response_class(stream())
如果使用gevent,则可以处理每个请求,在这种情况下,可以生成其他eventlet。这会带来自身的性能问题,因为所有eventlet都在一个线程中循环运行(asyncio也是如此)。Gunicorn也支持aiohttp,但Flask不支持,尽管可以让它工作