将 Greenleets 与 Flask 和标准线程相结合

Posted

技术标签:

【中文标题】将 Greenleets 与 Flask 和标准线程相结合【英文标题】:Combining Greenleets with Flask, and Standard Threads 【发布时间】:2019-02-04 04:00:19 【问题描述】:

今天我遇到了一些棘手的情况。我一直在使用基于 eventlet 的 Flask-socketio 进程。为此,我还需要对 Thread 模块、socket 和 os 模块进行猴子补丁。

发生的情况是我正在运行正常的 Flask-socketio 进程中的后台线程。现在,该线程将在一段时间后创建一个进程(来自另一个脚本 Process.py),该进程将负责处理图像,并将使用 SimpleQueues 与其通信。第二个进程启动一个摄像头线程(picamera)来处理图像,该线程将负责获取新帧。

picamera 使用标准线程库的结果,所以我需要禁用猴子补丁并在 Process.py 的导入中使用标准线程 python 模块,并且仍然使用带有flask-socketio进程的补丁模块。这可能吗?是否可以在不同的进程上使用不同的线程模块?

【问题讨论】:

【参考方案1】:

简短的回答是,是的,您的主流程和子流程不一定都需要使用 eventlet。在子进程中不使用它并没有错,事实上,如果你要与硬件通信,使用 eventlet 几乎总是不能很好地工作。

我认为您可以按照启动子流程的方式让事情顺利进行,但在我看来,如果您分别运行这两个流程,而不是将一个作为其他。您的主进程将是 100% eventlet,所有猴子都打了补丁,而您的摄像头进程将绝对没有 eventlet 的踪迹。这两个进程之间的通信是通过任何可用的 IPC 机制完成的。您可以使用队列、套接字等。相机进程将启动并进入等待状态,例如,通过观察主进程发出的作业队列。

希望这会有所帮助!

【讨论】:

以上是关于将 Greenleets 与 Flask 和标准线程相结合的主要内容,如果未能解决你的问题,请参考以下文章

Flask安装

轻量级NoSQL数据库与PythonWeb-Flask框架组合使用3-Flask框架安装

Python / Flask - 将 flask_restless 与 flask_httpauth 一起使用

将 sass 与 Flask 和 jinja2 一起使用

第六章:FLASK模版引擎以及模版方法

将 mongo 与 FLASK 和 python 一起使用