今天我遇到了一些棘手的情况。我一直在使用基于事件的Flask-socketio进程。为此,我还需要猴子修补Thread模块,socket和os模块。
发生的事情是我在Flask-socketio进程中运行了一个正常运行的后台线程。现在,此线程将在一段时间后创建一个Process(来自另一个脚本Process.py),该Process将负责处理图像,并将使用SimpleQueues与之通信。为了使图像完美,第二个过程启动了一个摄像头线程(picamera),该线程将负责获取新帧。
picamera使用标准线程库的结果,因此我需要禁用猴子修补程序,并在Process.py的导入中使用标准线程python模块,并且仍将烧瓶和socketio进程一起使用修补后的模块。有可能吗可以在不同的进程上使用不同的线程模块吗?
答案 0 :(得分:0)
简短的回答是,是的,您的主流程和子流程不一定都需要同时使用eventlet。在子流程中不使用它没什么问题,实际上,如果您要与硬件进行通信,那么使用eventlet几乎总是无法正常工作。
我认为您可以按照开始子流程的方式来使事情正常进行,但是我认为,如果分别运行这两个流程而不是将其作为子流程的一个子流程运行,那么您所面临的挑战将会减少。其他。您的主要过程将是100%的事件事件,其中所有猴子都会被修补,而您的摄影机过程将绝对没有事件事件的痕迹。这两个过程之间的通信是通过任何可用的IPC机制完成的。您可以使用队列,套接字等。摄像头进程将启动并进入等待状态,例如,通过观察队列中是否有主进程发出的作业。
希望这会有所帮助!