2009-08-27 23 views
6

में पायथन इंटरप्रेटर साझा करें मैं डब्ल्यूएसजीआई के साथ अपाचे (प्रीफ़र्क) के भीतर एक पायथन एप्लिकेशन चलाने का प्रयास कर रहा हूं ताकि एक पायथन दुभाषिया का उपयोग किया जा सके। यह जरूरी है क्योंकि एप्लिकेशन दौड़ की स्थिति को होने से रोकने के लिए थ्रेड सिंक्रनाइज़ेशन का उपयोग करता है। चूंकि अपाचे प्रीफर्क कई प्रक्रियाओं को जन्म देता है, इसलिए कोड दुभाषियों के बीच साझा नहीं किया जा रहा है और इस प्रकार थ्रेड सिंक्रनाइज़ेशन अप्रासंगिक है (यानी प्रत्येक थ्रेड केवल इसे अपने ताले देखता है जो अन्य प्रक्रियाओं पर असर नहीं डालता है)।Apache Prefork/WSGI

यहाँ सेटअप है:

  • अपाचे 2.0 (prefork)
  • WSGI
  • अजगर 2,5

यहाँ प्रासंगिक अपाचे विन्यास है:

WSGIApplicationGroup %{GLOBAL} 
<VirtualHost _default_:80> 

WSGIScriptAlias//var/convergedsecurity/apache/osvm.wsgi 

Alias /admin_media/ /var/www/html/admin_media/ 

<Directory /var/www/html/admin_media> 
Order deny,allow 
Allow from all 
</Directory> 

Alias /media/ /var/www/html/media/ 

<Directory /var/www/html/media> 
Order deny,allow 
Allow from all 
</Directory> 

</VirtualHost> 

यहाँ मैंने अभी तक कोशिश की है (व्हाई में से कोई भी नहीं ch काम किया):

  1. WSGIApplicationGroup %{GLOBAL}
  2. जोड़ना वर्चुअल होस्ट के भीतर WSGIDaemonProcess और WSGIProcessGroup निर्दिष्ट करना:

    WSGIDaemonProcess osvm धागे = 50
    WSGIProcessGroup osvm

है वहाँ कोई रास्ता नहीं है WSGI के साथ एक पाइथन दुभाषिया का उपयोग करने के लिए Apache prefork को मजबूर करें? दस्तावेजों का मतलब है कि आप WSGIDaemonProcess और WSGIAplplicationGroup विकल्पों के साथ कर सकते हैं लेकिन अपाचे अभी भी प्रत्येक प्रक्रिया के लिए एक अलग पायथन दुभाषिया बनाता है।

उत्तर

9

आपके पास यूनिक्स सिस्टम पर एम्बेडेड मोड में डब्लूएसजीआई एप्लिकेशन नहीं चलाया जा सकता है, भले ही यह प्रीफ़ोर या कार्यकर्ता एमपीएम हो, क्योंकि वास्तव में कई प्रक्रियाएं होंगी। देखें:

http://code.google.com/p/modwsgi/wiki/ProcessesAndThreading

एक डेमॉन प्रक्रिया समूह एकल प्रक्रिया से मिलकर और उस के लिए WSGI आवेदन सौंपने के लक्ष्य को हासिल करना चाहिए कि आप क्या चाहते बनाना। आपको डब्लूएसजीआईप्लिकेशंस ग्रुप का उपयोग करने की भी आवश्यकता नहीं है यदि यह केवल एक घुड़सवार डब्लूएसजीआई एप्लीकेशन है जिसके बारे में आप बात कर रहे हैं। यदि आप पूरी तरह से सुनिश्चित होना चाहते हैं, तो आप इसे भी सेट कर सकते हैं।

इस प्रकार VirtualHost भीतर विन्यास होगा:

WSGIDaemonProcess osvm 
WSGIProcessGroup osvm 
WSGIApplicationGroup %{GLOBAL} 

WSGIScriptAlias//var/convergedsecurity/apache/osvm.wsgi 

हालांकि 'प्रक्रियाओं = 1' WSGIDaemonProcess यह स्पष्ट है कि एक प्रक्रिया बनाई गई है बनाता है के लिए, हालांकि विकल्प प्रदान नहीं करते और बस एक प्रक्रिया के लिए डिफ़ॉल्ट जाने । 'प्रक्रियाओं' विकल्प का कोई भी उपयोग, भले ही एक प्रक्रिया के लिए 'wsgi.multiprocess' को सही पर सेट किया जाएगा।

अपने वास्तविक डब्लूएसजीआई आवेदन का उपयोग करने के बजाय, मैं आपको निम्न सरल परीक्षण कार्यक्रम के साथ परीक्षण करने का सुझाव दूंगा।

import cStringIO 
import os 

def application(environ, start_response): 
    headers = [] 
    headers.append(('Content-Type', 'text/plain')) 
    write = start_response('200 OK', headers) 

    input = environ['wsgi.input'] 
    output = cStringIO.StringIO() 

    print >> output, "PID: %s" % os.getpid() 
    print >> output 

    keys = environ.keys() 
    keys.sort() 
    for key in keys: 
     print >> output, '%s: %s' % (key, repr(environ[key])) 
    print >> output 

    output.write(input.read(int(environ.get('CONTENT_LENGTH', '0')))) 

    return [output.getvalue()] 

उस के आउटपुट में, पीआईडी ​​मान हमेशा एक जैसा होना चाहिए। Wsgi.multiprocess झंडा झूठा होना चाहिए। Mod_wsgi।process_group मान वह होना चाहिए जिसे आपने डेमॉन प्रक्रिया समूह कहा था। और mod_wsgi.application_group एक खाली स्ट्रिंग होना चाहिए।

यदि यह आप नहीं देख रहे हैं, तो सुनिश्चित करें कि आप वास्तव में कॉन्फ़िगरेशन परिवर्तन करने के बाद अपाचे को पुनरारंभ करें। यह भी जोड़ें:

LogLevel debug 

वर्चुअलहोस्ट के लिए अपाचे कॉन्फ़िगरेशन में जोड़ें। ऐसा करने से प्रक्रिया निर्माण और स्क्रिप्ट लोडिंग के बारे में अपाचे त्रुटि लॉग में बहुत अधिक संदेशों को लॉग करने के लिए mod_wsgi का कारण बन जाएगा, जिसमें प्रक्रिया समूह और एप्लिकेशन समूह की जानकारी शामिल है।

डिबगिंग के बारे में अन्य जानकारी के लिए देखें:

http://code.google.com/p/modwsgi/wiki/DebuggingTechniques

तो अभी भी समस्या, सुझाव है कि आप गूगल समूह पर mod_wsgi मेलिंग सूची में जाते हैं।

+0

धन्यवाद, आपकी प्रतिक्रिया सही थी। मेरे पास कुछ समस्याएं आईं जो एक बार मुझे डिमन प्रक्रिया समूह स्थापित करने के बाद आया; दोनों को Google समूह पर प्रदान की गई जानकारी के साथ हल किया गया था। विशेष रूप से, मुझे अपाचे कॉन्फ़िगरेशन (http://code.google.com/p/modwsgi/issues/detail?id=40) में उपयोगकर्ता और समूह निर्देशों को पहले रखना था और WSGISocketPrefix सेट करना था। आपकी मदद के लिए धन्यवाद। –