Python 使用带有阻塞代码的Gevent
我正在构建一个具有推送事件的网站,因此需要Gevent websockets才能工作,但是其余的代码被阻塞了,因为我真的不知道如何使其异步 因此,使用带有阻塞代码的Gevent是否存在一些问题? 我正在使用monkeypatch\u all像这样启动服务器,并使用nginx代理传递来隐藏端口号:Python 使用带有阻塞代码的Gevent,python,asynchronous,flask,gevent,Python,Asynchronous,Flask,Gevent,我正在构建一个具有推送事件的网站,因此需要Gevent websockets才能工作,但是其余的代码被阻塞了,因为我真的不知道如何使其异步 因此,使用带有阻塞代码的Gevent是否存在一些问题? 我正在使用monkeypatch\u all像这样启动服务器,并使用nginx代理传递来隐藏端口号: WSGIServer(('127.0.0.1', 8000), app).serve_forever() 如果我真的理解得很好,那么做所有这些将确保阻塞代码流通过Greenlets进行协作 就像我有一
WSGIServer(('127.0.0.1', 8000), app).serve_forever()
如果我真的理解得很好,那么做所有这些将确保阻塞代码流通过Greenlets进行协作
就像我有一个简单的代码(主页的路由定义),它从帖子集合中获取所有项目,将其保存在数据库var中,并作为数据库的形式馈送到呈现模板(index.html),然后循环:
# front page
def index():
database = posts.find()
return render_template('index.html', db=database)
这实际上是index.html:
{% extends 'layout.html' %}
{% block body %}
<div class=post>
{% for post in db %}
<h4><a href="/post/{{ post._id }}/{{ post.slug }}"> {{ post.title }} </a></h4>
{% endfor %}
</div>
{% endblock %}
{%extends'layout.html%}
{%block body%}
{db%中的post的%s}
{%endfor%}
{%endblock%}
这段代码与Gevent一起使用安全吗?或者我应该依赖其他东西吗
如果不是,我应该如何使它异步?断开循环?“异步”数据库调用,如posts.find()?如果
monkey patch\u all
是项目导入的首批模块之一,则代码将协同运行。Monkey补丁用非阻塞gevent版本替换了许多阻塞的python模块,这些版本的行为方式相同,但没有阻塞
因此,如果您的数据库/Web服务器使用的是正常的tcp连接,或者如果您使用的是“绿色”版本的数据库驱动程序,那么您不必做任何事情,事情就会协调工作
看来你走对了方向。