5

मैं BaseHttpServer का उपयोग कर एक HTTP प्रॉक्सी जो SocketServer जो मिला 2 अतुल्यकालिक mixins (ThreadingMixIn और ForkingMixIn)क्या सॉकेटसेवर के लिए ThreadingMixIn और ForkingMixIn के लिए कोई पूल है?

उन दो कि वे एक अनुरोध पर काम के साथ समस्या यह

(एक नई धागा या कांटा आवंटित पर आधारित है बनाने के लिए कोशिश कर रहा था प्रत्येक अनुरोध के लिए एक नया सबप्रोसेस)

क्या एक मिक्सिन है जो प्रत्येक में चलो के 4 सबप्रोसेसेस और 40 धागे के पूल का उपयोग करता है, इसलिए अनुरोध पहले से बनाए गए धागे द्वारा संभाले जाते हैं?

क्योंकि यह एक बड़ा प्रदर्शन लाभ होगा और मुझे लगता है कि यह कुछ संसाधनों को बचाएगा।

उत्तर

1

मैं एक परियोजना है कि इस मुद्दे

https://github.com/muayyad-alsadi/python-PooledProcessMixIn

हो सकता है आप में शामिल होने के लिए मुझे खत्म Todos (के बाद CTRL + C को साफ)

+0

मुझे इवेंटलेट-आधारित सर्वरों जैसे https://pypi.python.org/pypi/Spawning/ –

+0

के साथ तुलना करने की आवश्यकता हो सकती है, यह अब पीई 2.7 का उपयोग करके काम नहीं करता है। मुझे आपके डेमो की कोशिश करते समय यह त्रुटि मिलती है: pickle.PicklingError: pickle नहीं चुन सकता है: यह थ्रेड के रूप में नहीं मिला है। – OriginalCliche

+0

मैं पाई 2.7 का उपयोग कर रहा हूं, और मेरा कोड कुछ भी नहीं उठाता –

5

आप से एक पूल इस्तेमाल कर सकते हैं चाहते हैं को हल करती है शुरू कर दिया है concurrent.futures (अजगर 3.2 के बाद stdlib में):

from BaseHTTPServer import HTTPServer, test 
from SimpleHTTPServer import SimpleHTTPRequestHandler 
from SocketServer  import ThreadingMixIn 

from concurrent.futures import ThreadPoolExecutor # pip install futures 

class PoolMixIn(ThreadingMixIn): 
    def process_request(self, request, client_address): 
     self.pool.submit(self.process_request_thread, request, client_address) 

def main(): 
    class PoolHTTPServer(PoolMixIn, HTTPServer): 
     pool = ThreadPoolExecutor(max_workers=40) 

    test(HandlerClass=SimpleHTTPRequestHandler, ServerClass=PoolHTTPServer) 

if __name__=="__main__": 
    main() 

आप एक सूत्रण मामले के लिए कार्यान्वयन देख सकते हैं बल्कि तुच्छ है।

आप server.py पर सहेजें, तो आप के रूप में यह पड़ सकते है:

$ python -mserver 

यह आदेश 40 धागे तक का उपयोग करता http://your_host:8000/ पर अनुरोध का उत्तर देने के लिए।

HTTPServer का मुख्य उपयोग केस परीक्षण उद्देश्यों के लिए है।

+0

मल्टीप्रोसेसिंग पूल का उपयोग करने के समान है, और यह इष्टतम समाधान नहीं है, उदाहरण के लिए इसमें कतार और अचार शामिल हैं .. आदि। कृपया [मेरा समाधान] देखें (https://github.com/muayyad-alsadi/python-PooledProcessMixIn/wiki) विशेषताएं। –

+0

@muayyad: 1. यह साथ ही stdlib कक्षाएं विकास/परीक्षण उद्देश्यों के लिए हैं 2. मैं उम्मीद कर सकता हूं कि उपर्युक्त काम इसकी सादगी के कारण हैं। मैं आपके समाधान के बारे में ऐसा नहीं कह सकता 3. क्या आपके पास कोई बेंचमार्क है? – jfs

+1

@ जे-एफ-सेबेस्टियन: मैंने घेराबंदी के लिए घेराबंदी का उपयोग किया है, यह प्रदर्शन को दोगुना करता है (मेरा ट्रांस दर: 1530, 800 के बारे में अन्य मिश्रण) –

संबंधित मुद्दे