import socket
import threading
import time
import asyncio
def connect(conn,addr):
with conn:
print('Connected',addr)
while True:
data = conn.recv(1024).decode('utf-8')
if not data:
break
data = data.split('\r\n')
match data[2]:
case 'ECHO':
conn.sendall(f'+{data[4]}\r\n'.encode('utf-8'))
case 'PING':
conn.sendall(f'+PONG\r\n'.encode('utf-8'))
case 'SET':
for i in range(len(data)):
if data[i].lower() == 'px':
timed = [float(data[10])]
threading.Thread(target=timer, args=(timed,data)).start()
dataList[data[4]] = f'+{data[6]}\r\n'
conn.sendall(f'+OK\r\n'.encode('utf-8'))
case 'GET':
conn.sendall(dataList.get(data[4]).encode('utf-8'))
def timer(timer,data):
seconds =float(timer[0] / 1000)
time.sleep(seconds)
dataList[data[4]] = f'$-1\r\n'
def main():
global dataList
dataList = {}
server_socket = socket.create_server(("localhost", 6379), reuse_port=True)
loop = asyncio.new_event_loop()
loop.create_server(connect, host="localhost", port=6379, sock=server_socket)
while True:
conn, addr = server_socket.accept() # wait for client
## threading.Thread(target=connect,args=(conn,addr)).start()
if __name__ == "__main__":
main()
It used to just use the threading module with "threading.Thread(target=connect,args=(conn,addr)).start()". I understand that event loop should be used rather than needing many threads? Looking through the docs i can't figure out how to convert it. The loop.create_server can accept an existing socket object as an argument but im not sure how to implement this or if i should just delete the code for that socket and try again with this event loop