Python 使用带有阻塞代码的Gevent

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进行协作 就像我有一

我正在构建一个具有推送事件的网站,因此需要Gevent websockets才能工作,但是其余的代码被阻塞了,因为我真的不知道如何使其异步

因此,使用带有阻塞代码的Gevent是否存在一些问题? 我正在使用monkeypatch\u all像这样启动服务器,并使用nginx代理传递来隐藏端口号:

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连接,或者如果您使用的是“绿色”版本的数据库驱动程序,那么您不必做任何事情,事情就会协调工作


看来你走对了方向。