下立即返回我有兩個Python腳本,一個啓動另一個與子如何通過Apache的python2.5產卵過程和Windows
invoke.py:
import subprocess
p = subprocess.Popen(['python', 'long.py'])
print "Content-Type: text/plain\n"
print "invoked (%d)" % (p.pid)
longtime.py:
import time
import os
print "start (%d)" %(os.getpid())
time.sleep(10)
print "end (%d)" %(os.getpid())
當我從shell執行invoke.py它立即返回並且longtime.py在後臺工作(在Windows和Linux上工作)。如果我通過Web Interface(Apache CGI)調用invoke.py,它可以在Linux 下運行,但不能在Windows機器上運行,那麼網站會卡住,並且只有在longtime.py完成後纔會返回。
如何配置Python子進程或Apache以在Windows下獲取相同的行爲?有什麼不同?
也許在Windows上的Apache配置是不同的,但我沒有找到什麼。
的Linux:Debian,請Python2.5.2,Apache2.2.9
Windows系統:WinXP中,Python2.7,Apache2.2.17
也許你也有一個更好的設計方法(因爲它有點尷尬我該怎麼辦呢現在)。
What for ?:我在web服務器上有一個腳本,需要相當長的時間來計算(longtime.py)。我想通過網絡界面激活執行。網站應立即返回,longtime.py應該在後臺工作,並將輸出寫入文件。稍後,來自Web界面的請求將檢查文件是否生成並讀取輸出。我不能使用通用的雲提供程序,因爲它們不支持多線程。另外,我無法在Web服務器上安裝守護程序處理程序,因爲進程的運行時間最長。
嗨tuscias,我已經與您的代碼測試,它在外殼的作品(如以前的版本太)但如果我把從網頁上的invoke.py,讓Apache的執行。我也玩過Popen的參數,但總是一樣的結果。我認爲問題是Apache,不知道爲什麼。它是否適用於Apache或僅與shell協同工作? – Chris 2011-03-13 23:01:50
我附加了mod_wsgi的另一個解決方案。也許這有幫助。 – tuscias 2011-03-14 08:30:30
嘿謝謝指出WSGI。我修改了調用服務的結構,它對WSGI很有用! – Chris 2011-03-15 13:37:22