2013-10-07 43 views
2

我有兩個腳本運行,一個端口:80和一個端口:81。由於我們的一些用戶在端口爲81的服務器上發生了一些問題,我試圖實現這樣的解決方法;子進程不會等待,並使PhantomJS崩潰

做它的老方式,這對於大多數用戶正常工作:

  • AngularJS應用使得請求example.com:81/getpdf/1
  • 瓶服務器產生使用兩個單獨的subprocess.Popen電話PNG和使用PhantomJS PDF文件和ImageMagick的和.wait()方法
  • 使用Flask的send_file(),PDF被髮回給用戶並開始下載

我對這個問題的解決方法:

  • AngularJS使得請求example.com/getpdf/1
  • 瓶服務器(:80)做出新的GET請求,r = requests.get(url_with_port_81),僞造老AngularJS請求創建PNG/PDF
  • 而不是使用send_file()的,我現在返回生成PDF的路徑,
  • 我回到send_file(r.text)

現在,使用我的解決方法,我運行創建PNG/PDF的子流程以某種方式崩潰。我必須sudo pkill python,並且只有當我這樣做時,我纔會得到一個PNG,但服務器上的文件夾中沒有數據。

基本上,PhantomJS已經運行,但沒有加載任何數據(只有HTML/CSS,但沒有重要的東西,需要來自Flask服務器)和崩潰。這怎麼可能?我只是假裝瀏覽器使用requests.get的請求,或者我不知道這裏的東西?

我以爲subprocess.Popen非阻塞,所以我的數據請求仍然可以回答填充PNG/PDF?

+2

對不起,很難確定這裏發生了什麼,特別是因爲我們沒有看到任何這樣做的代碼。你有一件事(一個應用程序)調用另一件事(另一個應用程序)做另一件事(一個使用PhantomJS和ImageMagick的過程)。看看你是否可以刪除件,直到你最低限度,你可以發佈,我們可以運行復制問題。否則,我們很難幫助你。 –

回答

2

我終於找到原因我的subprocess不斷崩潰。 顯然,它在這裏描述的Python 2.7.3 <錯誤,:http://bugs.python.org/issue12786

我在我的Popen呼叫使用'close_fds=True'和所有固定。感謝你的努力,@Mark Hildreth!