इंटरऑपरेबिलिटी के कारण, मुझे एक वेब सेवा के रूप में एक एप्लिकेशन को तैनात करने की आवश्यकता है। मैं ऐसा करने के लिए स्पाईन (http://spyne.io/) का उपयोग कर रहा हूं, ws के लिए एक अजगर ढांचा। अब तक सब ठीक है।
हालाँकि, सेवा को एक साथ कई अनुरोध प्राप्त होंगे। इसलिए, मुझे कार्यक्षमता बढ़ाने की आवश्यकता है, क्योंकि अनुरोध कई I/O (डेटाबेस, फ़ाइल) कार्य करता है।
निम्न कोड स्पाइन में एक बुनियादी वेब सेवा का उदाहरण देता है। उसके आधार पर, क्या स्पाइन थ्रेड पूल या थ्रेडिंग का समर्थन करता है? मैं सेवा को एकाधिक थ्रेड में कैसे सक्रिय या लपेट सकता हूं? यदि संभव नहीं है, तो मैं इसे पायथन थ्रेडिंग लाइब्रेरी के साथ कैसे प्राप्त कर सकता हूं?
अग्रिम में धन्यवाद।
from spyne import Application, rpc, ServiceBase, Integer
from spyne.protocol.soap import Soap11
from spyne.server.wsgi import WsgiApplication
class HelloWorldService(ServiceBase):
@rpc(Integer, Integer, _returns=Integer)
def multiply(ctx, a, b):
return a * b
application = Application([HelloWorldService],
tns='spyne.multiply',
in_protocol=Soap11(validator='lxml'),
out_protocol=Soap11()
)
if __name__ == '__main__':
# You can use any Wsgi server. Here, we chose
# Python's built-in wsgi server but you're not
# supposed to use it in production.
from wsgiref.simple_server import make_server
wsgi_app = WsgiApplication(application)
server = make_server('0.0.0.0', 8000, wsgi_app)
server.serve_forever()
1 उत्तर
स्पाईन सिंगल-थ्रेडेड या मल्टीथ्रेडेड सेटिंग्स में ब्लॉकिंग/एसिंक कोड दोनों के साथ काम करता है।
यदि आपको कई थ्रेड्स के साथ कंसीडर करने की आवश्यकता है, तो एक WSGI सर्वर का उपयोग करें जो कई थ्रेड्स को हैंडल करने में सक्षम हो, जैसे CherryPy, ट्विस्टेड, mod_wsgi, आदि। WSGI रेफरेंस इम्प्लीमेंटेशन जिसे आप कोड सैंपल (wsgiref) में इस्तेमाल करते हैं, कॉन्करेंसी को सपोर्ट नहीं करता है।
यदि आपको एसिंक विधि कॉल के साथ समवर्ती करने की आवश्यकता है, तो मुड़ का उपयोग करें।
उदाहरण https://github.com/arskom/spyne/tree/master/ पर स्थित हैं। उदाहरण
संबंधित सवाल
नए सवाल
python
पायथन एक बहु-प्रतिमान है, गतिशील रूप से टाइप किया हुआ, बहुउद्देशीय प्रोग्रामिंग भाषा है। यह एक साफ और एक समान वाक्यविन्यास सीखने, समझने और उपयोग करने के लिए त्वरित होने के लिए डिज़ाइन किया गया है। कृपया ध्यान दें कि अजगर 2 आधिकारिक तौर पर 01-01-2020 के समर्थन से बाहर है। फिर भी, संस्करण-विशिष्ट पायथन सवालों के लिए, [अजगर -२.०] या [अजगर -३.x] टैग जोड़ें। पायथन वेरिएंट (जैसे, ज्योथन, PyPy) या लाइब्रेरी (उदा।, पांडस और न्यूमपी) का उपयोग करते समय, कृपया इसे टैग में शामिल करें।