Requisito previo: Programación de sockets en Python , Subprocesos múltiples en Python
Programación de sockets -> Nos ayuda a conectar un cliente a un servidor. El cliente es el remitente y el receptor del mensaje y el servidor es solo un oyente que trabaja con los datos enviados por el cliente.
¿Qué es un hilo?
Un subproceso es un proceso liviano que no requiere mucha sobrecarga de memoria, son más baratos que los procesos.
¿Qué es la programación de sockets de subprocesos múltiples?
Multithreading es un proceso de ejecución de múltiples subprocesos simultáneamente en un solo proceso.
Módulos de subprocesos múltiples:
un módulo _thread y un módulo de subprocesosse usa para subprocesos múltiples en python, estos módulos ayudan en la sincronización y proporcionan un bloqueo para un subproceso en uso.
from _thread import * import threading
Un objeto de bloqueo es creado por->
print_lock = threading.Lock()
Un bloqueo tiene dos estados, «bloqueado» o «desbloqueado». Tiene dos métodos básicos adquirir() y liberar(). Cuando el estado está desbloqueado , se usa print_lock.acquire() para cambiar el estado a bloqueado y print_lock.release() se usa para cambiar el estado a desbloquear.
La función thread.start_new_thread() se utiliza para iniciar un nuevo hilo y devolver su identificador. El primer argumento es la función a llamar y su segundo argumento es una tupla que contiene la lista posicional de argumentos.
Estudiemos la programación de sockets multiproceso cliente-servidor por código
. Nota: el código funciona con python3.
Código de servidor de subprocesos múltiples
Python3
# import socket programming library import socket # import thread module from _thread import * import threading print_lock = threading.Lock() # thread function def threaded(c): while True: # data received from client data = c.recv(1024) if not data: print('Bye') # lock released on exit print_lock.release() break # reverse the given string from client data = data[::-1] # send back reversed string to client c.send(data) # connection closed c.close() def Main(): host = "" # reserve a port on your computer # in our case it is 12345 but it # can be anything port = 12345 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind((host, port)) print("socket binded to port", port) # put the socket into listening mode s.listen(5) print("socket is listening") # a forever loop until client wants to exit while True: # establish connection with client c, addr = s.accept() # lock acquired by client print_lock.acquire() print('Connected to :', addr[0], ':', addr[1]) # Start a new thread and return its identifier start_new_thread(threaded, (c,)) s.close() if __name__ == '__main__': Main()
Console Window: socket binded to port 12345 socket is listening Connected to : 127.0.0.1 : 11600 Bye
Codigo del cliente
Python
# Import socket module import socket def Main(): # local host IP '127.0.0.1' host = '127.0.0.1' # Define the port on which you want to connect port = 12345 s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) # connect to server on local computer s.connect((host,port)) # message you send to server message = "shaurya says geeksforgeeks" while True: # message sent to server s.send(message.encode('ascii')) # message received from server data = s.recv(1024) # print the received message # here it would be a reverse of sent message print('Received from the server :',str(data.decode('ascii'))) # ask the client whether he wants to continue ans = input('\nDo you want to continue(y/n) :') if ans == 'y': continue else: break # close the connection s.close() if __name__ == '__main__': Main()
Console Window: Received from the server : skeegrofskeeg syas ayruahs Do you want to continue(y/n) :y Received from the server : skeegrofskeeg syas ayruahs Do you want to continue(y/n) :n Process finished with exit code 0
Referencia->
https://docs.python.org/2/library/thread.html
Este artículo es una contribución de SHAURYA UPPAL . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA