So aktivieren Sie das Lesen / Schreiben von net.Conn mit golang, um mit dem Kontext abzubrechen

Motivation

Wenn Sie versuchen, aus dem Socket zu lesen, kann dies blockieren Ich möchte es mit Kontext abbrechen können.

Ich möchte den folgenden Code wenn möglich schreiben, kann ihn aber nicht ausführen. Notieren Sie sich daher die Alternative

select {
case size, err := conn.Read():
 // Abkürzung
case <-ctx.Done():
 //略
}

Lösung

Verwenden Sie Set Deadline wie folgt. Abhängig von der Fristeinstellungszeit kann sich die Antwortzeit auf "ctx.Done ()" erhöhen. Ich denke, dass die Antwortzeitanforderung an ctx.Done () viel lockerer ist als die Antwortzeitanforderung an Read, daher sollte dies kein Problem sein.


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
    }

    //Schreiben Sie Buf-Operationen usw.


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

Nun, das Problem wurde gelöst, aber es ist nicht sehr schön, deshalb möchte ich etwas dagegen tun.

Recommended Posts

So aktivieren Sie das Lesen / Schreiben von net.Conn mit golang, um mit dem Kontext abzubrechen
Wie man Problemdaten mit Paiza liest
Zusammenfassung des Schreibens von AWS Lambda
[Bilderkennung] Lesen des Ergebnisses der automatischen Annotation mit VoTT
Lesen einer CSV-Datei mit Python 2/3
[Python] Wie man Excel-Dateien mit Pandas liest
So lesen Sie ein Array mit Pythons ConfigParser
So legen Sie Attribute mit Mock of Python fest
So implementieren Sie "named_scope" von RubyOnRails mit Django
Zusammenfassung zum Lesen numerischer Daten mit Python [CSV, NetCDF, Fortran Binary]
Wie man PyPI liest
Wie man JSON liest
So schreiben Sie einen Listen- / Wörterbuchtyp von Python3
So geben Sie die CSV eines mehrzeiligen Headers mit Pandas aus
Versuchen Sie, den Inhalt von Word mit Golang zu erhalten
[Python] Umgang mit Pandas read_html Lesefehler
Ableiten der MAP-Schätzung von HMM mit PyStruct
Ableiten der MAP-Schätzung von HMM mit OpenGM
Wie man strukturiertes SVM von ChainCRF mit PyStruct lernt
Zusammenfassung, wie der Status mit mehreren Funktionen geteilt wird
[Python] Zusammenfassung der Funktionen eval / exec + Schreiben einer Zeichenfolge mit Zeilenumbrüchen
Lesen und Schreiben durch Komprimieren von Variablen wie DataFrame mit joblib anstelle von pickle
Beim 15. Offline-Echtzeitversuch habe ich versucht, das Problem des Schreibens mit Python zu lösen
Offline-Echtzeit zum Schreiben eines E14 Python-Implementierungsbeispiels
XPath-Grundlagen (2) - So schreiben Sie XPath
Ich habe versucht, das Problem von F02 zu lösen, wie man mit Python offline in Echtzeit schreibt
Wie aktualisiere ich mit SQLAlchemy?
Wie man mit Theano besetzt
So zeigen Sie eine Liste der mit pyenv installierbaren Versionen an
Wie mit SQLAlchemy ändern?
Schreiben Sie mit Python in csv
So schreiben Sie ein Datenspeicher-Update asynchron mit Google Apps Engine
So trennen Sie Zeichenfolgen mit ','
Zusammenfassung zum Schreiben von in gRPC verwendeten .proto-Dateien
Wie man RDP auf Fedora31 macht
Lesen einer Excel-Datei (.xlsx) mit Pandas [Python]
Wie lösche ich mit SQLAlchemy?
So schreiben Sie offline in Echtzeit Lösen von E05-Problemen mit Python
So aktivieren Sie das Speichern von Keras Regressor mit pickle oder joblib
So extrahieren Sie Funktionen von Zeitreihendaten mit PySpark Basics
[Hugo] Zusammenfassung zum Hinzufügen von Seiten zu der mit Learn erstellten Site
So erhalten Sie die ID von Type2Tag NXP NTAG213 mit nfcpy
So erstellen Sie einen Befehl zum Lesen der Einstellungsdatei mit Pyramide
Offline-Echtzeit zum Schreiben eines Python-Implementierungsbeispiels für das E15-Problem
Ich habe versucht, das Entwicklungsstartverfahren von Django kurz zusammenzufassen
So überwachen Sie den Ausführungsstatus von sqlldr mit dem Befehl pv
Erklärt, wie TensorFlow 2.X mit der Implementierung von VGG16 / ResNet50 verwendet wird
Node.js: So töten Sie Nachkommen eines Prozesses, der von child_process.fork () gestartet wurde
So schreiben Sie eine Dokumentzeichenfolge, um ein benanntes Tupeldokument mit Sphinx zu erstellen
So schreiben Sie offline in Echtzeit Lösen von F01-Problemen mit Python
So brechen Sie RT mit tweepy ab
Python: So verwenden Sie Async mit
Lesen von e-Stat-Subregionsdaten
[Python] Mit Python in eine CSV-Datei schreiben
Zusammenfassung der Verwendung von pandas.DataFrame.loc
Wie man nüchtern mit Pandas schreibt
Wiederverwendung von Flaschen Wie schreibe ich HTML?
So verwenden Sie virtualenv mit PowerShell
So installieren Sie Python-Pip mit Ubuntu20.04LTS