kissycn opened a new issue, #1189: URL: https://github.com/apache/rocketmq-clients/issues/1189
### Before Creating the Bug Report - [x] I found a bug, not just asking a question, which should be created in [GitHub Discussions](https://github.com/apache/rocketmq-clients/discussions). - [x] I have searched the [GitHub Issues](https://github.com/apache/rocketmq-clients/issues) and [GitHub Discussions](https://github.com/apache/rocketmq-clients/discussions) of this repository and believe that this is not a duplicate. - [x] I have confirmed that this bug belongs to the current repository, not other repositories of RocketMQ. ### Programming Language of the Client Python ### Runtime Platform Environment OS: macOS (Version unknown, inferred from KqueueSelector) Language: Python 3.x RocketMQ Server Version: 5.x Client Version: (Please fill in your installed version, e.g., rocketmq-python-client 5.0.4) ### RocketMQ Version of the Client/Server rocketmq-python-client: 5.1.0 RocketMQSercer:5.4.0 ### Run or Compiler Version _No response_ ### Describe the Bug I am using the rocketmq-python-client (5.x) on macOS. When trying to start a PushConsumer, the program hangs indefinitely at producer.startup(). It never returns, nor does it throw any exception. However, SimpleConsumer works perfectly fine in the same environment with the same configuration. It seems like a deadlock or blocking issue related to grpcio interaction with asyncio event loops on macOS (KqueueSelector). ### Steps to Reproduce ```python import logging import sys from rocketmq import (ClientConfiguration, ConsumeResult, Credentials, FilterExpression, Message, MessageListener, PushConsumer) logging.basicConfig(level=logging.DEBUG, stream=sys.stdout, format='%(asctime)s - %(levelname)s - %(message)s') class TestMessageListener(MessageListener): def consume(self, message: Message) -> ConsumeResult: print(f"consume message, topic:{message.topic}, message_id: {message.message_id}.") return ConsumeResult.SUCCESS if __name__ == '__main__': endpoints = "192.168.0.80:8081" credentials = Credentials() # if auth enable # credentials = Credentials("ak", "sk") config = ClientConfiguration(endpoints, credentials) # with namespace # config = ClientConfiguration(endpoints, credentials, "namespace") topic = "TestTopic1" consumer_group = "consumer_group_1" # in most case, you don't need to create too many consumers, singleton pattern is recommended # close the push consumer when you don't need it anymore push_consumer = PushConsumer(config, consumer_group, TestMessageListener(), {topic: FilterExpression()}) try: push_consumer.startup() try: input("Please Enter to Stop the Application.\r\n") except Exception as e: print(f"{push_consumer} raise exception: {e}") push_consumer.shutdown() print(f"{push_consumer} shutdown.") except Exception as e: print(f"{push_consumer} startup raise exception: {e}") if push_consumer.is_running: push_consumer.shutdown() print(f"{push_consumer} shutdown.") ``` ### What Did You Expect to See? ``` 2026-02-02 15:03:07,513 - DEBUG - Using selector: KqueueSelector 2026-02-02 15:03:07,513 - DEBUG - [_cygrpc] Loaded running loop: id(loop)=4390437520 2026-02-02 15:03:07,513 - DEBUG - Using AsyncIOEngine.POLLER as I/O engine 2026-02-02 15:03:07,514 - DEBUG - [_cygrpc] Loaded running loop: id(loop)=4390437520 2026-02-02 15:03:07,514 - DEBUG - [_cygrpc] Loaded running loop: id(loop)=4390437520 2026-02-02 15:03:07,527 - DEBUG - [_cygrpc] Loaded running loop: id(loop)=4390437520 2026-02-02 15:03:07,527 - DEBUG - [_cygrpc] Loaded running loop: id(loop)=4390437520 2026-02-02 15:03:07,527 - DEBUG - [_cygrpc] Loaded running loop: id(loop)=4390437520 ... (Hangs here) ... ``` ### What Did You See Instead? / ### Additional Context _No response_ -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
