2017-09-23 1 views
0

mein Code:django Kanäle können nicht ausgegeben Protokolle in Echtzeit

def ws_receive(message): 
    text = message.content['text'] 
    request = json.loads(text) 
    cmd = request['cmd']  

    results = run(cmd) 
    print(cmd) 
    for result in results: 
     Group(GROUP_NAME).send({'text':result.decode('utf-8')}) 
     print(result) 

cmd ist wie ping -c 4 www.google.com;

die Anschluss Ergebnisse ist:

[2017/09/24 07:24:44] WebSocket HANDSHAKING/[127.0.0.1:59285] 
[2017/09/24 07:24:44] WebSocket CONNECT/[127.0.0.1:59285] 
[2017/09/24 07:24:44] HTTP GET /api/hosts/?status=used 200 [0.07, 127.0.0.1:59247] 
ping -c 4 www.google.com 
2017-09-24 07:24:58.512885 b'PING www.google.com (74.125.23.103): 56 data bytes\n' 
2017-09-24 07:24:58.513127 b'64 bytes from 74.125.23.103: icmp_seq=0 ttl=45 time=138.542 ms\n' 
2017-09-24 07:24:59.517881 b'64 bytes from 74.125.23.103: icmp_seq=1 ttl=45 time=142.954 ms\n' 
2017-09-24 07:25:00.522698 b'64 bytes from 74.125.23.103: icmp_seq=2 ttl=45 time=144.568 ms\n' 
2017-09-24 07:25:01.562285 b'64 bytes from 74.125.23.103: icmp_seq=3 ttl=45 time=180.163 ms\n' 
2017-09-24 07:25:01.562400 b'\n' 
2017-09-24 07:25:01.562459 b'--- www.google.com ping statistics ---\n' 
2017-09-24 07:25:01.562517 b'4 packets transmitted, 4 packets received, 0.0% packet loss\n' 
2017-09-24 07:25:01.562586 b'round-trip min/avg/max/stddev = 138.542/151.557/180.163/16.662 ms\n' 

aber, Die websocket Debug-Informationen des Browsers ist: browser ws debug

so, Ich bin sicher, dass die Kanäle den Befehl bis zum Ende die Nachricht gesendet hat, aber ich möchte die Nachricht in Echtzeit senden.

+0

Ich möchte Protokolle in Echtzeit auf den Browser drucken, verwenden Sie "Ping" oder "Tail-F" –

Antwort

0

Versuchen Senden sofort:

Group(GROUP_NAME).send({'text':result.decode('utf-8')}, immediately=True) 

Der Grund dafür ist, dass Sie innerhalb der websocket Verbraucher Funktion sind. Während Sie sich darin befinden, werden die Aufrufe Group.send nicht ausgeführt, sondern nur gesammelt und im Batch ausgeführt, sobald Sie die Funktion verlassen. Die Verwendung von immediately=True überschreibt dieses Verhalten.

Verwandte Themen