我正在使用python发布和订阅消息队列

发布者:

rc = redis.Redis(host='127.0.0.1', port=6379)
rc.ping()
ps = rc.pubsub()
ps.subscribe('bdwaf')
r_str = "--8198b507-A--"
for i in range(0, 20000):
    rc.publish('bdwaf', r_str)

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

当发布者循环范围大于20000时,订阅者似乎无法获取所有数据,只有当我向发布者添加sleep方法时,订阅者才能工作。

如何在不向发布者添加睡眠方法的情况下使其工作,并且无论发布者在多大范围内发布数据,订阅者都可以获取所有数据?

最佳答案

您可以将消息保留在分布式任务队列中。 Redis通常使用的是用python编写的分布式任务队列,称为celery(http://www.celeryproject.org/)

关于python - Redis比订阅者更快,无法获取所有数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44793271/

10-14 19:02