我可以以某种方式将响应对象从一个进程“移动”到另一个进程吗?
第一个进程是一个非阻塞服务器,它执行其他一些IO。它需要在非阻塞环境中完成,如Tornado或Twisted或类似的东西。
使用PIL处理图像需要另一个进程(实际上是一个“工作者”进程池)。由于GIL,我无法在线程中执行此操作。但是,要么工作者需要获取响应对象的文件句柄来写入结果,要么将结果返回给第一个进程,并且因为结果可能非常大(~1 mb),所以它不会看起来好主意。 (它可能是一个单独的进程池,而不是每个请求的分支 - 后者似乎是一个糟糕的策略)
那么,我能以某种方式允许工作进程直接写入响应吗?
答案 0 :(得分:0)
你不能。只有一个进程可以同时访问一个端口,如果不访问该端口,则无法直接响应。
但你不需要那样做。你需要的是代理!您可以向应用程序添加一个线程,该线程将在另一个端口上侦听。然后启动映像进程,当该进程完成其工作时,您可以将结果发送到端口。然后你的线程将读取它并发送响应。