簡體   English   中英

Subprocess.Popen等到孩子完成

[英]Subprocess.Popen wait untill the child finish

我正在開發基於CGI,Apache2,python(2.76)的網絡工具。 Web服務器在Ubuntu虛擬機上。 用戶提交作業后,我希望服務器立即返回網頁,顯示指向即將發布的結果的鏈接。 因為計算將花費一些時間,所以我使用Subprocess.Popen來調用一個函數,該函數可以完成所有計算。 下面顯示了我的代碼流程。 我在自己的(Mac)計算機上進行了測試,它可以在計算完成之前立即返回一個網頁。 但是在Ubuntu虛擬機上,它將返回頁面,直到計算完成。 Subprocess.Popen在Ubuntu上不起作用嗎?

Main()
   preprocess 
   return_a_wen_page
   Subprocess.Popen(function_do_calculation)

subprocess.Popen可在Ubuntu上使用。 問題可能是您從Apache調用它。 您可以嘗試重定向標准流:

with open(os.devnull, 'r+b', 0) as DEVNULL:
    subprocess.Popen(cmd, stdin=DEVNULL, stdout=DEVNULL, stderr=DEVNULL,
                     close_fds=True)

如果沒有幫助,還添加preexec_fn=os.setsidstart_new_session=True模擬)。 或者只是發送一條消息((unix)套接字,命名管道)到可以在其上調用subprocess.Popen進程的計算機上獨立運行的守護進程。請自由打開而不是cgi腳本(請考慮是否像celery這樣的東西可以為您簡化它)。

這是我第一次做Web應用程序,我不知道mod_wsgi。

with open(os.devnull, 'r+b', 0) as DEVNULL:
      subprocess.Popen(cmd, stdin=DEVNULL, stdout=DEVNULL, stderr=DEVNULL,close_fds=True)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM