Tôi đã viết một lớp python rất đơn giản chờ kết nối trên ổ cắm. Mục đích là đưa lớp này vào một ứng dụng hiện có và gửi dữ liệu một cách đồng bộ đến khách hàng kết nối.Chặn khối chấp nhận Python - ngăn ứng dụng thoát khỏi
Vấn đề là khi đợi trên socket.accept(), tôi không thể kết thúc ứng dụng của mình bằng cách nhấn ctrl-c. Tôi không thể phát hiện khi lớp học của tôi nằm ngoài phạm vi và thông báo cho đến khi kết thúc.
Lý tưởng nhất là ứng dụng dưới đây nên thoát sau khi time.sleep (4) hết hạn. Như bạn có thể thấy bên dưới, tôi đã thử sử dụng lựa chọn, nhưng điều này cũng ngăn ứng dụng phản hồi lại ctrl-c. Nếu tôi có thể phát hiện rằng biến 'a' đã vượt quá phạm vi trong phương thức chính, tôi có thể đặt cờ thoát (và giảm thời gian chờ trên lựa chọn để làm cho nó đáp ứng).
Bất kỳ ý tưởng nào?
nhờ
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()
Cảm ơn vì điều đó, nó đã thực hiện thủ thuật. Tôi đã thử self.daemon = True nhưng điều đó không làm bất cứ điều gì (tôi đang chạy python 2,5 trên Win32). Thay đổi nó thành self.setDaemon (True) đã thực hiện thủ thuật! cảm ơn! –