छोड़ने से ऐप को रोकता है मैंने एक बहुत ही सरल पायथन क्लास लिखा है जो सॉकेट पर कनेक्शन की प्रतीक्षा करता है। इसका उद्देश्य इस वर्ग को मौजूदा ऐप में रखना और असीमित रूप से ग्राहकों को जोड़ने के लिए डेटा भेजना है।पायथन सॉकेट ब्लॉक स्वीकार करते हैं -
समस्या यह है कि सॉकेट.एसेप्ट() पर प्रतीक्षा करते समय, मैं ctrl-c दबाकर अपना आवेदन समाप्त नहीं कर सकता। न तो मैं यह पता लगा सकता हूं कि मेरी कक्षा गुंजाइश से बाहर हो जाती है और इसे समाप्त करने के लिए सूचित करती है।
आदर्श रूप से नीचे दिए गए आवेदन को समय के बाद छोड़ना चाहिए। नींद (4) समाप्त हो जाती है। जैसा कि आप नीचे देख सकते हैं, मैंने चयन का उपयोग करने का प्रयास किया, लेकिन यह ऐप को ctrl-c का जवाब देने से रोकता है। अगर मैं पता लगा सकता हूं कि चर 'ए' मुख्य विधि में दायरे से बाहर हो गया है, तो मैं छोड़ने वाला ध्वज सेट कर सकता हूं (और इसे उत्तरदायी बनाने के लिए चयन पर टाइमआउट को कम कर सकता हूं)।
कोई विचार?
धन्यवाद
import sys
import socket
import threading
import time
import select
class Server(threading.Thread):
def __init__(self, i_port):
threading.Thread.__init__(self)
self.quitting = False
self.serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.serversocket.bind((socket.gethostname(), i_port))
self.serversocket.listen(5)
self.start()
def run(self):
# Wait for connection
while not self.quitting:
rr,rw,err = select.select([self.serversocket],[],[], 20)
if rr:
(clientsocket, address) = self.serversocket.accept()
clientsocket.close()
def main():
a = Server(6543)
time.sleep(4)
if __name__=='__main__':
main()
इसके लिए धन्यवाद, यह चाल है। मैंने self.daemon = True की कोशिश की लेकिन उसने कुछ भी नहीं किया (मैं Win32 पर पायथन 2.5 चला रहा हूं)। इसे self.setDaemon (True) में बदलना यद्यपि चाल था! धन्यवाद! –