2014-09-12 78 views
7

我試圖執行一個shell命令以及使用python 信號模塊殺死它。ValueError異常:信號只能在主線程 - Django的 - mod_wsgi的

我知道信號只與主線程工作,所以我運行Django開發服務器,

python manage.py runserver --nothreading --noreload 

,它工作正常。

但是當我部署與Apache/mod_wsgi的Django的應用程序,它顯示了以下錯誤:

[Fri Sep 12 20:07:00 2014] [error]  response = function.call(request, **data) 
[Fri Sep 12 20:07:00 2014] [error] File "/Site/cloud/lib/python2.6/site-packages/dajaxice/core/Dajaxice.py", line 18, in call 
[Fri Sep 12 20:07:00 2014] [error]  return self.function(*args, **kwargs) 
[Fri Sep 12 20:07:00 2014] [error] File "/Site/cloud/soc/website/ajax.py", line 83, in execute 
[Fri Sep 12 20:07:00 2014] [error]  data = scilab_run(code, token, book_id, dependency_exists) 
[Fri Sep 12 20:07:00 2014] [error] File "/Site/cloud/soc/website/helpers.py", line 58, in scilab_run 
[Fri Sep 12 20:07:00 2014] [error]  output = task.run().communicate()[0] 
[Fri Sep 12 20:07:00 2014] [error] File "/Site/cloud/soc/website/timeout.py", line 121, in run 
[Fri Sep 12 20:07:00 2014] [error]  lambda sig,frame : os.killpg(self.pgid,self.timeoutSignal)) 
[Fri Sep 12 20:07:00 2014] [error] ValueError: signal only works in main thread 

這裏是我的Apache虛擬主機設置:

WSGIDaemonProcess testcloud display-name=scilab_cloud user=apache group=apache threads=1 
WSGIProcessGroup testcloud 
WSGIScriptAlias//Site/cloud/soc/soc/wsgi.py 
WSGIImportScript /Site/cloud/soc/soc/wsgi.py process-group=testcloud application-group=%{GLOBAL} 

我也有外面的下方設置httpd.conf中的虛擬主機:

WSGIRestrictSignal Off 
WSGISocketPrefix /var/run/wsgi 

Here is the link to the pro克其採用信號和我在Django的應用程序中使用的一個。

任何幫助,將不勝感激。

回答

0

我不知道可以做,很容易,或者至少不mod_wsgi的。線程或不是線程的決定是建立之和運行Apache和mod_wsgi的,這兩者都是默認設置時間選項,穿線。

我想指出你有關的文檔,但我只能發佈兩個環節,所以我認爲這是更好地度過他們提出了一個解決方案:

我有體面的好經驗運行shell命令從蟒蛇與sh,它甚至有一個異步執行模塊。也許你可以開始運行shell命令Python代碼,並在需要時與回調對象處理。

,或者甚至更好,因爲sh要求你有一定的憂慮處理信號時,你可以只運行它沒有異步執行模塊,但在另一個進程與multiprocessing.Proces,它會給你一個Process對象,你可以殺了與object.terminate()

相關問題