2017-05-26 84 views
0

我想執行一個長時間運行的Python 2.7 CGI腳本異步並返回一個完整的HTML瀏覽器,所以它不超時(並沒有等待腳本完成)。 ..我運行在Windows XAMPP和縮寫代碼是異步Python CGI調用暫停瀏覽器直到完成

我的問題是瀏覽器仍然等待,直到整個腳本完成...我做錯了什麼?我讀過其他類似的問題,他們評論說,添加stdout和stderr參數可能會解決這個問題,但它不適用於我...我也嘗試設置close_fds = True並消除stdout/sterr參數,這也不起作用... script.py工作正常,沒有任何輸出...

或者還有另一種方法,你會推薦?感謝您提供任何幫助!

#!c:\program files\anaconda2\python.exe 
import cgi 
import subprocess 
import sys 

subprocess.Popen([sys.executable, 'c:/path/script.py'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT) 

print 'Content-type:text/html\r\n\r\n' 
print '<html>' 
print '<head></head>' 
print '<body></body>' 
+0

[使用ASYNCIO做在Django週期性任務(https://stackoverflow.com/questions/43838872/using-asyncio-to-do-periodic-task-in-django) – e4c5

+0

的可能的複製洛爾,我不是建議你使用asyncio。請花點時間閱讀答案 – e4c5

+0

謝謝!我希望有一些東西比芹菜輕一些,因爲它很少運行,所有的基礎設施似乎有點多。你可能會推薦另一種解決方案嗎? –

回答

0

Popen有一些標誌將父進程從父進程中分離出來...即使子進程仍在運行,它也允許cgi「完成」。

kwargs = {} 
CREATE_NEW_PROCESS_GROUP = 0x00000200 # note: could get it from subprocess 
DETACHED_PROCESS = 0x00000008   # 0x8 | 0x200 == 0x208 
kwargs.update(creationflags=DETACHED_PROCESS | CREATE_NEW_PROCESS_GROUP) 
subprocess.Popen([sys.executable, 'c:/path/script.py'], close_fds=True, **kwargs) 
相關問題