2017-05-26 5 views
0

長時間実行しているPython 2.7 cgiスクリプトを非同期で実行しようとしていますので、タイムアウトしないで(スクリプトが完了するのを待たずに)ブラウザに完全なHTMLを返します。 ..私はWindows XAMPPで実行しており、短縮コードは以下のとおりです非同期Python CGI呼び出しは、完了するまでブラウザを停止します

スクリプト全体が完了するまで、ブラウザはまだ待機しています...間違っていますか?私は他の同様の質問を読んだことがありますが、stdoutとstderrの引数を追加すると問題が解決するかもしれないとコメントしていますが、私にとってはそうではありません...また、close_fds = Trueを設定してstdout/... 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

(https://stackoverflow.com/questions/43838872/using-asyncio-to-do-periodic-task-in-django) – e4c5

+0

を[ジャンゴでの定期的なタスクを実行するために使用してasyncio]の可能性のある重複笑、私は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) 
関連する問題