【问题标题】:Receive HTTP request in one Python process, reply from another在一个 Python 进程中接收 HTTP 请求,从另一个进程中回复
【发布时间】:2012-07-09 11:01:28
【问题描述】:

我能否以某种方式将响应对象从一个进程“移动”到另一个进程?

第一个进程是一个非阻塞服务器,它执行一些其他的 IO。它需要在 Tornado 或 Twisted 等非阻塞环境中完成。

使用 PIL 处理图像需要另一个进程(实际上是“工作”进程池)。由于 GIL,我无法在线程中执行此操作。但是,工作人员需要获取响应对象的文件句柄来写入结果,或者它应该将结果返回给第一个进程,并且由于结果可能非常大(~1 mb),它不会似乎是个好主意。 (它可能是一个单独的进程池,而不是每个请求的分叉 - 后一个似乎是一个糟糕的策略)

那么,我可以让工作进程直接写入响应吗?

【问题讨论】:

  • 也许我遗漏了一些东西,但为什么不写入实际文件,并在响应处理程序中读取呢?然后你只需要传递给图像处理器的文件路径。
  • 让不同的线程/进程从头到尾处理不同的请求不是更自然吗?
  • @NicolaMusatti 因为图像处理似乎一直在阻塞 IO
  • @AntonStrogonoff 那是写+读+写,而我可以用我的方案写
  • @AntonStrogonoff 而不是那样,如果其他一切都失败了,我只会从一个服务器进程到另一个服务器进程执行 X-Accel-Redirect

标签: python events io response multiprocessing


【解决方案1】:

你不能。同一时间只有一个进程可以访问一个端口,如果不访问该端口,您将无法直接响应。

但你不需要那个。您需要的是代理!您可以向您的应用程序添加一个线程,该线程将侦听不同的端口。然后您启动您的图像进程,当该进程完成其工作时,您可以将结果发送到端口。然后你的线程将读取它并发送响应。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-18
    • 2013-04-13
    • 1970-01-01
    • 1970-01-01
    • 2012-05-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多