Hacktoberfest 2026 : les issues que les mainteneurs ont marquées pour octobre, ouvertes et accessibles aux débutants. Parcourir les issues Hacktoberfest

uvloop runs at_fork hook when running subprocess

Ouverte
#749 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Évaluation

Difficulté
3/5
Temps estimé
1-2 jours
Accessibilité débutants
58/100
Type d'issue
Bug
Clarté
Plutôt claire
Activité
Calme
Stack technique
python

Piste de recherche

Commencez par suivre la gestion par uvloop de asyncio.create_subprocess_exec et le chemin de fork utilisé après uvloop.install(), en la comparant avec la boucle asyncio standard et le comportement de os.register_at_fork. Relancez la reproduction fournie avec le sous-processus uptime ; c’est terminé lorsque le hook after_in_child n’est pas déclenché pour ce lancement de sous-processus.

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

Description

Speaking about os.register_at_fork python docs explicitly state:

These calls are only made if control is expected to return to the Python interpreter. A typical subprocess launch will not trigger them as the child is not going to re-enter the interpreter.

The standard asyncio loop behaves this way. But uvloop doesn't. Repro:

import asyncio
import os
   
import uvloop


def hook():
    os.write(2, b"TRIGGERED\n")
    
    
async def run():        
    process = await asyncio.create_subprocess_exec(
        "uptime",
        stdout=asyncio.subprocess.PIPE,
        stderr=asyncio.subprocess.PIPE,
        start_new_session=True
    )

    stdout, stderr = await process.communicate()
    print(f"STDOUT: {stdout.decode('utf-8').strip()}")
    

if __name__ == "__main__":
    os.register_at_fork(after_in_child=hook)

    print("asyncio")
    asyncio.run(run())
    
    print("uvloop")
    uvloop.install()
    asyncio.run(run())

Output:

asyncio
STDOUT: 16:56:42 up 35 days,  6:20,  1 user,  load average: 5.21, 4.34, 4.27
uvloop
TRIGGERED
STDOUT: 16:56:42 up 35 days,  6:20,  1 user,  load average: 5.21, 4.34, 4.27
Langage dominant
Cython
Étoiles
11.9k
Forks
616
Métriques de merge des PR
Aucune PR mergée en 30 j

Préparer son environnement

Ce projet ne fournit ni conteneur de développement, ni Dockerfile, ni guide de contribution : l'installation est à votre charge. Commencez par son README, et consultez notre guide de la première contribution pour les étapes générales.

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 MagicStack/uvloop

Toutes les issues de MagicStack/uvloop

Issues similaires

Plus d'issues Operating Systems

Recevez les nouvelles issues par e-mail

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