2014-09-12 15 views
7

Tôi đang cố gắng thực hiện lệnh shell và tiêu diệt nó bằng python tín hiệu mô-đun.ValueError: tín hiệu chỉ hoạt động trong chủ đề chính - Django - mod_wsgi

Tôi biết các tín hiệu chỉ làm việc với chủ đề chính, vì vậy tôi chạy máy chủ phát triển Django với,

python manage.py runserver --nothreading --noreload 

và nó hoạt động tốt.

Nhưng khi tôi triển khai các ứng dụng django với Apache/mod_wsgi, nó cho thấy các lỗi sau:

[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 

Đây là tôi apache VirtualHost thiết lập:

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} 

Tôi cũng có các thiết lập bên dưới bên ngoài virtualhost trong httpd.conf:

WSGIRestrictSignal Off 
WSGISocketPrefix /var/run/wsgi 

Here is the link cho chuyên nghiệp gram sử dụng tín hiệu và thiết bị tôi sử dụng trong ứng dụng django của mình.

Mọi trợ giúp sẽ được đánh giá cao.

Trả lời

0

Tôi không chắc rằng có thể thực hiện dễ dàng, hoặc ít nhất không phải với mod_wsgi. Các quyết định thread hoặc không để thread là tổng của xây dựng và chạy các tùy chọn thời gian trong cả hai apache và mod_wsgi, được cả hai thiết lập theo mặc định, để luồng.

tôi sẽ chỉ cho bạn các tài liệu về điều đó, nhưng tôi chỉ có thể gửi hai liên kết, vì vậy tôi nghĩ rằng nó tốt hơn để dành cho họ trong việc đề xuất một giải pháp:

Tôi có kinh nghiệm decently tốt chạy các lệnh shell từ python với sh, thậm chí có mô-đun thực thi không đồng bộ. Có lẽ bạn có thể bắt đầu mã python của bạn chạy lệnh shell và xử lý đối tượng gọi lại khi cần.

Hoặc, thậm chí tốt hơn, như sh yêu cầu bạn phải có một số quan tâm khi xử lý tín hiệu, bạn chỉ có thể chạy nó mà không có mô-đun thực hiện không đồng bộ, nhưng trong quá trình khác với multiprocessing.Proces, mà sẽ cung cấp cho bạn một đối tượng Process bạn chỉ có thể giết chết với object.terminate()

Các vấn đề liên quan