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

Combining Greenleets with Flask, and Standard Threads

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

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

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

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

我认为您可以按照启动子流程的方式使事情正常进行,但我认为,如果您 运行 将这两个流程分开,而不是一个作为另一个的子过程。你的主进程将是 100% 的 eventlet,所有的东西都是猴子修补的,而你的相机进程将完全没有 eventlet 的痕迹。这两个进程之间的通信是通过任何可用的 IPC 机制完成的。您可以使用队列、套接字等。相机进程将启动并进入等待状态,例如,通过查看主进程发出的作业的队列。

希望对您有所帮助!