본문 바로가기
기술자료/파이썬

selectors 초간단 소스 Python

by 와이즈캣 2023. 12. 13.
728x90
반응형

Unix C Network API의 Select에 대응하는 기법이 파이썬에도 존재하고 있었음.

아래는 샘플 코드

import selectors
import socket

aSelectors = selectors.DefaultSelector()

server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(('127.0.0.1', 5000))
server_socket.listen()

aSelectors.register(server_socket, selectors.EVENT_READ, data=None)

def callback_accept(aSocket, aMask):
    client_socket, addr = aSocket.accept()
    print(f'연결 수락: {addr}')
    aSelectors.register(client_socket, selectors.EVENT_READ, data=callback_data)

def callback_data(aSocket, aMask):
    aData = aSocket.recv(1024)
    
    if aData:
        print(f'받은 데이터: {data}')
        aSocket.send(b'Received your message\n')
    else:
        print('연결 종료')
        aSelectors.unregister(sock)
        aSocket.close()

aSelectors.register(server_socket, selectors.EVENT_READ, data=callback_accept)

while True:
    events = aSelectors.select()	# 블럭킹
    for temp_key, temp_mask in events:
        temp_callback = temp_key.data
        temp_callback(temp_key.fileobj, temp_mask)
728x90