Multiprocessing Client connection, send call is blocking when multiple threads try to connect to IPC Server which is offline/down/not running

Abierto
#101,405 0 comentarios 1 reacción 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
4/5
Tiempo estimado
3-5 días
Aptitud para principiantes
42/100
Tipo de issue
Error
Claridad
Bastante claro
Estado de actividad
Estancado
Stack tecnológico
python

Línea de trabajo

Comienza en el punto de entrada multiprocessing.connection.Client y reproduce el problema en Windows 10 con tres hilos mientras el servidor IPC está desconectado. Rastrea por qué solo una llamada devuelve la excepción de conexión rechazada; se considera terminado cuando todos los hilos regresan en lugar de permanecer bloqueados, con cobertura de regresión para este escenario.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

topic-multiprocessing type-bug

Bug report

When multiple threads access send call of multiprocessing Client to connect to server via IPC, the threads are blocked forever. This occurs when IPC server is down and the client tries to connect to server.

CODE:

from multiprocessing.connection import Client
def ipc_send(data={}):
    try:
        address = ('localhost', 56000)
        print("ipc address: ", address)
        conn = Client(address, authkey="SOMESECRET")
        conn.send(data)
        res = conn.recv()
        conn.close()
        return True
    except Exception as e:
        print(e)
    return None

As server is down, when ipc_send() is called by 3 different threads(including main thread), suprisingly only one thread has returned None with exception: [WinError 10061] No connection could be made because the target machine actively refused it.

It is trivial that Error would be connection refused as server is down, but only one thread has thrown the error and rest of the 2 threads are possibly blocked at

conn = Client(address, authkey="SOMESECRET")

Your environment

Python 3.8.8
OS: Windows 10.

Lenguaje dominante
Python
Estrellas
77.2k
Forks
36k
Merge medio
1 d 9 h
PR fusionados (30 d)
558

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de python/cpython

Todos los issues de python/cpython

Issues similares

Más issues de Python

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.