烧瓶gevent线程卡在kafka使用者上

问题描述 投票:0回答:1

我们有一个flask应用,在gevent worker模式下使用gunicorn进行部署。该应用程序本身可以收听很少的REST api,但也可以收听kafka使用者(使用融合客户端)。当我们部署应用程序时,kafka使用者可以按预期工作,但是当向应用程序提交REST请求时,应用程序不会处理它们。

似乎应用程序线程卡在了kafka使用者上。如果我们删除消费者代码,则该应用程序将按预期工作。

有什么建议吗?

python flask gunicorn gevent confluent-kafka
1个回答
0
投票

问题是,我们使用kafka消费者的方式是“同时为True”

while True:
    msg = self.client.poll(1.0)
    if msg is None:
        continue
    if msg.error():
        print("Consumer error: {}".format(msg.error()))
        continue
    self.handle_msg(msg.value())

导致gevent卡在其上,并且不切换到其他线程。解决方案是在使用者循环中添加sleep命令,以释放线程来处理REST请求。

© www.soinside.com 2019 - 2024. All rights reserved.