Comment activer la lecture / écriture de net.Conn avec Golang pour annuler avec le contexte

motivation

Si vous essayez de lire à partir de la prise, cela peut bloquer, donc Je veux pouvoir l'annuler avec le contexte.

Je voudrais écrire le code suivant si possible, mais je ne peux pas le faire, alors prenez note de l'alternative

select {
case size, err := conn.Read():
 // Abréviation
case <-ctx.Done():
 //略
}

Solution

Utilisez Set Deadline comme ceci. En fonction de l'heure de réglage du délai, le temps de réponse à ctx.Done () peut augmenter Je pense que la demande de temps de réponse à ctx.Done () est beaucoup plus lâche que la demande de temps de réponse à Read, donc cela ne devrait pas être un problème.


continue_read := true
for continue_read {
    err := conn.SetReadDeadline(time.Now().Add(time.Millisecond * 500))
    if err != nil {
        return err
    }

    size, err := conn.Read(buf)
    switch {
    case err == nil || os.IsTimeout(err):
        continue_read = true  // Do nothing
    case errors.Is(err, io.EOF):
        continue_read = false
    default:
        return err
    }

    //Ecrire des opérations buf, etc.


    select {
    case <-ctx.Done():
        return ctx.Err()
    default:
    }
}

Eh bien, le problème a été résolu, mais ce n'est pas très beau, alors j'aimerais faire quelque chose à ce sujet.

Recommended Posts

Comment activer la lecture / écriture de net.Conn avec Golang pour annuler avec le contexte
Comment lire les données de problème avec Paiza
Résumé de l'écriture d'AWS Lambda
[Reconnaissance d'image] Comment lire le résultat de l'annotation automatique avec VoTT
Comment lire un fichier CSV avec Python 2/3
[Python] Comment lire des fichiers Excel avec des pandas
Comment lire un tableau avec ConfigParser de Python
Comment spécifier des attributs avec Mock of Python
Comment implémenter "named_scope" de RubyOnRails avec Django
Résumé de la lecture des données numériques avec python [CSV, NetCDF, Fortran binary]
Comment lire PyPI
Comment lire JSON
Comment écrire un type liste / dictionnaire de Python3
Comment générer un CSV d'en-tête multiligne avec des pandas
Essayez d'obtenir le contenu de Word avec Golang
[Python] Comment gérer l'erreur de lecture pandas read_html
Comment déduire l'estimation MAP de HMM avec PyStruct
Comment déduire une estimation MAP de HMM avec OpenGM
Comment apprendre le SVM structuré de ChainCRF avec PyStruct
Résumé de la façon de partager l'état avec plusieurs fonctions
[Python] Résumé des fonctions eval / exec + Comment écrire une chaîne de caractères avec des sauts de ligne
Lire et écrire en compressant des variables telles que DataFrame avec joblib au lieu de pickle
Le 15e temps réel hors ligne, j'ai essayé de résoudre le problème de l'écriture avec python
Comment écrire un exemple d'implémentation E14 Python en temps réel hors ligne
XPath Basics (2) - Comment écrire XPath
J'ai essayé de résoudre le problème de F02 comment écrire en temps réel hors ligne avec Python
Comment mettre à jour avec SQLAlchemy?
Comment lancer avec Theano
Comment afficher une liste des versions installables avec pyenv
Comment modifier avec SQLAlchemy?
Écrire en csv avec Python
Comment écrire la mise à jour de la banque de données en asynchrone avec Google Apps Engine
Comment séparer les chaînes avec ','
Résumé de l'écriture des fichiers .proto utilisés dans gRPC
Comment faire RDP sur Fedora31
Comment lire un fichier Excel (.xlsx) avec Pandas [Python]
Comment supprimer avec SQLAlchemy?
Comment écrire hors ligne en temps réel Résolution des problèmes E05 avec Python
Comment activer Keras Regressor pour être enregistré avec Pickle ou Joblib
Comment extraire des fonctionnalités de données de séries chronologiques avec les bases de PySpark
[Hugo] Résumé de la façon d'ajouter des pages au site créé avec Learn
Comment obtenir l'ID de Type2Tag NXP NTAG213 avec nfcpy
Comment faire une commande pour lire le fichier de paramètres avec pyramide
Comment écrire un exemple d'implémentation Python du problème E15 en temps réel hors ligne
J'ai essayé de résumer brièvement la procédure de démarrage du développement de Django
Comment surveiller l'état d'exécution de sqlldr avec la commande pv
Explique comment utiliser TensorFlow 2.X avec l'implémentation de VGG16 / ResNet50
Node.js: Comment tuer les descendants d'un processus démarré par child_process.fork ()
Comment écrire une docstring pour créer un document tuple nommé avec sphinx
Comment écrire hors ligne en temps réel Résolution des problèmes F01 avec Python
Comment annuler RT avec Tweepy
Python: comment utiliser async avec
Comment lire les données de la sous-région e-Stat
[Python] Ecrire dans un fichier csv avec Python
Résumé de l'utilisation de pandas.DataFrame.loc
Comment écrire sobrement avec des pandas
Réutilisation du flacon Comment écrire du HTML
Pour utiliser virtualenv avec PowerShell
Comment installer python-pip avec ubuntu20.04LTS