python - 如何在 Flask 中使用 "start_background_task"的 block 函数?

标签 python flask

我正在使用 Flask 设置一个新服务器。 它使用flask_socketio和zmq将图像从服务器推送到网络。 我想使用 zmq.recv() 作为 block 函数。 然而它会堵塞 flask 。所有来自网络的消息都将被阻止。 如何在flask中使用 block 函数,而不使用socketio.sleep()

我尝试将 zmq.NOBLOCK 设置为 zmq.recv()。然后添加socketio.sleep(0.001)。它有效,但非常难看。

这是我的代码。

ctx = zmq.Context()
sock = ctx.socket(zmq.ROUTER)
sock.bind("tcp://*:9988")


def recvThread():   
    while True:     
            img = sock.recv()   
                socketio.emit("frame", img)


if __name__ == '__main__':
    init_zmq()
    with thread_lock:
        if thread is None:
            socketio.start_background_task(target=recvThread)
    socketio.run(app, host='0.0.0.0', port=5000)

有什么标志可以用于这种情况吗?

最佳答案

我通过用 eventlet.green.zmq 替换 zmq 解决了这个问题。 Ref

关于python - 如何在 Flask 中使用 "start_background_task"的 block 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55700168/

相关文章:

python - 如何在 Flask 中验证 URL 参数

python - 如何在 flask-sqlalchemy 中建立三向多对多关系

python - 让 python 程序和 c 程序共享数据的最佳方法是什么

python - Scrapy CrawlSpider : how to access item across different levels of parsing

python - 如何在列表理解中定义变量?

python - 在 pythonanywhere 托管的应用程序中找不到文件

python - 如何使用flask在多个页面中显示用户名?

html - 为什么 POST 请求的 header 内容类型在 chrome 和 firefox 之间仅在 "UTF-8"与 "utf-8"之间有所不同?

python - 尝试将 Python Pandas 中带有字符串的列转换为 Float 时出错

python - 从嵌套字典中动态删除项目