繁体   English   中英

Python Redis订阅无法获取所有数据?

[英]Python redis subscribe can not get all datas?

我正在使用python从redis获取数据,然后将其解析为kafka。 它在大多数情况下都可以正常工作。

但是,当我使用python模拟生成要重做的数据时,或者在queuen中有快速放入的数据时,我无法获取所有数据。

这是我的关于redis生产者的代码,用于模拟内部版本20000数据到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)

Redis消费者也是kafka生产者:

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

它只打印出4000条数据。

如果我评论a.parser(item['data']) ,它可以打印出所有数据num。

或者在redis生成器中使用sleep(0.001) ,它也可以打印所有数据num。

我的代码有什么问题?

我假设您正在使用redis-py

该文档将listen称为lib的较早版本。也许您应该使用另一种方法来读取消息。 例如带有回调

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()

编辑:

一次发布20000条消息时,redis服务器可能会内存不足。 尝试增加redis.conf文件中的redis.conf内存

maxmemory 500mb # or greater if needed

这是一个内存问题,请查看问题以获取有关如何处理它的更多信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM