2014-09-12 41 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()

相关问题