Python redis abonnieren kann nicht alle Daten bekommen?

Ich benutze Python, um Daten von redis zu bekommen und dann parser es zu kafka. Es funktioniert gut in den meisten Situationen.

Aber wenn ich Python verwenden, um zu simulieren, baue die Daten zu redis, oder es gab einen schnellen Einsteckdaten in queuen, ich kann nicht alle Daten bekommen.

Hier ist mein Code über Redis Produzent zu simulieren bauen 20000 Daten zu redis:

rc = redis.Redis(host='127.0.0.1', port=6379) rc.ping() ps = rc.pubsub() ps.subscribe('bdwaf') r_str = "--8198b507-A--\n[22/Jun/2017:14:13:19 +0800]ucTcxcMcicAcAcAcicAcAcAm 192.168.1.189 50054 127.0.0.1 80\n" for i in range(0, 20000): rc.publish('bdwaf', r_str) 

Und der redis Verbraucher auch der kafka Produzent ist:

 rc = redis.Redis(host='localhost', port=6379) rc.ping() ps = rc.pubsub() ps.subscribe('bdwaf') num = 0 for item in ps.listen(): if item['type'] == 'message': num += 1 a.parser(item['data']) print num 

Es druckt nur wie 4000 Daten aus.

Wenn ich den a.parser(item['data']) kommentiere a.parser(item['data']) , kann er alle a.parser(item['data']) ausdrucken.

Oder sleep(0.001) im Redis-Produzenten, es kann alle Daten auch ausdrucken.

Was ist falsch mit meinem Code?

One Solution collect form web for “Python redis abonnieren kann nicht alle Daten bekommen?”

Ich nehme an, du benutzt redis-py .

Die Dokumentation bezieht sich darauf, als ältere Version des lib zu listen … Vielleicht solltest du eine andere Methode zur Nachrichtenmessung verwenden. Zum Beispiel mit einem Rückruf

 p = r.pubsub() def my_handler(message): print 'MY HANDLER: ', message['data'] if item['type'] == 'message': num += 1 a.parser(item['data']) print num p.subscribe('bdwaf', my_handler) # read the subscribe confirmation message p.get_message() 

Bearbeiten:

Es ist möglich, dass Ihr Redis-Server nicht mehr Speicherplatz hat, wenn Sie 20000 Nachrichten gleichzeitig veröffentlichen. Versuche, den redis.conf Speicher in der redis.conf Datei zu redis.conf

 maxmemory 500mb # or greater if needed 

Es ist ein Speicher Problem, schauen Sie sich diese Frage für weitere Informationen, wie es zu behandeln.

Python ist die beste Programmiersprache der Welt.