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

Ouverte
#101,405 0 commentaires 1 réaction 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Évaluation

Difficulté
4/5
Temps estimé
3-5 jours
Accessibilité débutants
42/100
Type d'issue
Bug
Clarté
Plutôt claire
Activité
À l'abandon
Stack technique
python
Domaine
backend, networking

Piste de recherche

Commencez au point d’entrée multiprocessing.connection.Client et reproduisez le problème sous Windows 10 avec trois threads lorsque le serveur IPC est hors ligne. Suivez pourquoi un seul appel renvoie l’exception de connexion refusée ; le travail est terminé lorsque chaque thread revient au lieu de rester bloqué, avec une couverture de régression pour ce scénario.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

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.

Langage dominant
Python
Étoiles
77.2k
Forks
36k
Merge moyen
1 j 9 h
PR mergées (30 j)
558

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de python/cpython

Toutes les issues de python/cpython

Issues similaires

Plus d'issues Python

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.