Programación de sockets con subprocesos múltiples en Python

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *