2012-07-09 92 views
1

我能否以某種方式將響應對象從一個進程「移動」到另一個進程?在一個Python進程中接收HTTP請求,從另一個進程回覆

第一個進程是一個非阻塞服務器,它執行其他一些IO。它需要在像Tornado或Twisted這樣的非阻塞環境中完成。

需要使用PIL處理圖像時需要使用另一個進程(實際上是「工作者」進程池)。由於GIL,我無法在線程中執行此操作。然而,工作人員需要獲得響應對象的文件句柄以將結果寫入結果,或者它應該將結果返回給第一個進程,並且由於結果可能非常大(〜1 MB),所以不會似乎是一個好主意。 (這可能是一個獨立的進程池,而不是每個請求的分叉點 - 後者似乎是一個糟糕的策略)

因此,我可以以某種方式允許工作進程直接寫入響應?

+0

也許我錯過了一些東西,但爲什麼不寫入實際的文件,並在響應處理程序中讀取?那麼你只需要傳遞給圖像處理器文件路徑。 – Tony 2012-07-09 11:16:09

+0

從不同的線程/進程提供不同的請求開始到結束不是更自然嗎? – 2012-07-09 11:19:27

+0

@NicolaMusatti因爲圖像處理似乎一直在阻止IO – 2012-07-09 11:27:43

回答

0

你不能。一次只能有一個進程訪問一個端口,並且無法訪問該端口就無法直接進行響應。

但你不需要那樣。你需要的是代理!你可以添加一個線程到你的應用程序,它將在不同的端口上偵聽。然後,您啓動您的圖像過程,並在該過程完成其工作時,您可以將結果發送到端口。然後你線程會讀取它併發送響應。

相關問題