2011-09-08 19 views
7

प्रश्न: वहाँ समय किसी प्रकार बाहर है या socket.accept() अजगर में कार्य करने के लिए बीच में?अजगर सॉकेट वस्तु समय स्वीकार बाहर


जानकारी:

मैं एक प्रोग्राम है जो एक बच्चे धागा एक बंदरगाह के लिए बाध्य है और लगातार को स्वीकार करने और रखरखाव और मुख्य थ्रेड के लिए एक कतार में उन्हें गुजर गया है है। अभी मैं इतना बाधित करने के लिए यह उचित रूप से deconstruct कर सकते हैं बच्चे धागा पाने के लिए कोशिश कर रहा हूँ। मुझे लगता है कि यह संभव है के लिए मुझे बस बच्चे धागा बंद करो और माता-पिता बच्चे को deconstruct करने के लिए है, लेकिन दूसरी बार मैं कहाँ वापस जाने के लिए प्रारंभिक रूप को स्वीकार सक्षम होना चाहते हैं तो मैं बस फैसला किया है कि सबसे अधिक उपयोगी दृष्टिकोण होगा देखते हैं।

तो, वहाँ एक रास्ता है कि मैं एक समय के लिए बाहर है या विधि को स्वीकार तो धागा कुछ पहले ही उससे कनेक्ट होने ओ/डब्ल्यू लौट सकते हैं रद्द कर सकते हैं क्या है?

उत्तर

8

आप

import socket 
print socket.getdefaulttimeout() 
socket.setdefaulttimeout(60) 

साथ डिफ़ॉल्ट टाइमआउट सेट कर सकते हैं AFAIK यह सभी सॉकेट आपरेशन को प्रभावित करेगा

+0

कहीं भी होगी? ठीक। जब मैं दस्तावेज़ पढ़ें यह यह है कि केवल प्रभावित भेजने और recv की तरह ध्वनि बनाया है। धन्यवाद! – Narcolapser

2

आप इस उदाहरण में settimeout() उपयोग कर सकते हैं:

import socket 

tcpServer = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
tcpServer.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) 
tcpServer.bind(('0.0.0.0', 10000)) # IP and PORT 

stopped = False 
while not stopped: 
    try: 
    tcpServer.settimeout(0.2) # timeout for listening 
    tcpServer.listen(1) 
    (conn, (ip, port)) = tcpServer.accept() 
    except socket.timeout: 
    pass 
    except: 
    raise 
    else: 
    # work with the connection, create a thread etc. 
    ... 

पाश जब तक stopped (अधिकतम) के बाद सही है और फिर बाहर निकलने के लिए सेट कर दिया जाता चलेंगे टाइमआउट आप निर्धारित किया है। (अपने आवेदन में मैं एक नव निर्मित धागे के लिए कनेक्शन संभाल गुजरती हैं और आगे निरंतर कनेक्शन स्वीकार करने में सक्षम होने के लिए पाश जारी है।)

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