python-eureka-client icon indicating copy to clipboard operation
python-eureka-client copied to clipboard

Cannot run the event loop while another loop is running

Open haniDjebbi opened this issue 3 years ago • 5 comments

i created a flask application and am runing it using jupyter notebook. when i try to connect it to an eureka server i get the following error: 612 """Run until the Future is done. 613 614 If the argument is a coroutine, it is wrapped in a Task. (...) (...) 620 Return the Future's result, or raise its exception. 621 """ 622 self._check_closed() --> 623 self._check_running() 625 new_task = not futures.isfuture(future) 626 future = tasks.ensure_future(future, loop=self)

File D:\anaconda3\envs\ml_env01\lib\asyncio\base_events.py:585, in BaseEventLoop._check_running(self) 583 raise RuntimeError('This event loop is already running') 584 if events._get_running_loop() is not None: --> 585 raise RuntimeError( 586 'Cannot run the event loop while another loop is running')

RuntimeError: Cannot run the event loop while another loop is running 620 Return the Future's result, or raise its exception. 621 """ 622 self._check_closed() --> 623 self._check_running() 625 new_task = not futures.isfuture(future) 626 future = tasks.ensure_future(future, loop=self)

File D:\anaconda3\envs\ml_env01\lib\asyncio\base_events.py:585, in BaseEventLoop._check_running(self) 583 raise RuntimeError('This event loop is already running') 584 if events._get_running_loop() is not None: --> 585 raise RuntimeError( 586 'Cannot run the event loop while another loop is running')

RuntimeError: Cannot run the event loop while another loop is running

and here is the code snippet that am using :

rest_port = 6100
if __name__ == "__main__":
    eureka_client.init(eureka_server="http://localhost:8761/eureka",
                   app_name="pdf-miner",
                   instance_port=rest_port)
    app.run(port=rest_port)

haniDjebbi avatar Aug 18 '22 13:08 haniDjebbi

@haniDjebbi I have same problem and reinstall version 0.10.0 --> Fixed . You can try it !!!!

tducthang avatar Sep 22 '22 09:09 tducthang

Please check this answer: https://stackoverflow.com/questions/55409641/asyncio-run-cannot-be-called-from-a-running-event-loop-when-using-jupyter-no

You can run your code in aysnc mode:

rest_port = 6100
async def main():
    await eureka_client.init_async(eureka_server="http://localhost:8761/eureka",
               app_name="pdf-miner",
               instance_port=rest_port)
    app.run(port=rest_port)
await main()

keijack avatar Sep 22 '22 10:09 keijack

oh, thank you. It works :star_struck:

tducthang avatar Sep 22 '22 10:09 tducthang

@keijack I faced same problem. I start a django web service with gunicorn[gevent]. I register eureka server with init, and do_service to recall other service occured the RuntimeError. Traceback (most recent call last): File "/usr/src/app/PythonToolService/terrainPointRequest.py", line 198, in genHeat eureka_client.do_service(app_name="xxxxxx", service="xxxxxxxxx",prefer_ip=True, timeout=60) File "/usr/local/lib/python3.9/site-packages/py_eureka_client/eureka_client.py", line 1310, in do_service return get_event_loop().run_until_complete(do_service_async(app_name=app_name, service=service, return_type=return_type, File "/usr/local/lib/python3.9/asyncio/base_events.py", line 618, in run_until_complete self._check_running() File "/usr/local/lib/python3.9/asyncio/base_events.py", line 578, in _check_running raise RuntimeError('This event loop is already running') RuntimeError: This event loop is already running /usr/local/lib/python3.9/concurrent/futures/thread.py:79: RuntimeWarning: coroutine 'do_service_async' was never awaited del work_item I read the eureka_client.py ,Maybe the gloabl _event_loop caused, So I rewrite with threadLocal and run success. image

sdhzlzhk avatar Oct 08 '22 09:10 sdhzlzhk

@keijack I faced same problem. I start a django web service with gunicorn[gevent]. I register eureka server with init, and do_service to recall other service occured the RuntimeError. Traceback (most recent call last): File "/usr/src/app/PythonToolService/terrainPointRequest.py", line 198, in genHeat eureka_client.do_service(app_name="xxxxxx", service="xxxxxxxxx",prefer_ip=True, timeout=60) File "/usr/local/lib/python3.9/site-packages/py_eureka_client/eureka_client.py", line 1310, in do_service return get_event_loop().run_until_complete(do_service_async(app_name=app_name, service=service, return_type=return_type, File "/usr/local/lib/python3.9/asyncio/base_events.py", line 618, in run_until_complete self._check_running() File "/usr/local/lib/python3.9/asyncio/base_events.py", line 578, in _check_running raise RuntimeError('This event loop is already running') RuntimeError: This event loop is already running /usr/local/lib/python3.9/concurrent/futures/thread.py:79: RuntimeWarning: coroutine 'do_service_async' was never awaited del work_item I read the eureka_client.py ,Maybe the gloabl _event_loop caused, So I rewrite with threadLocal and run success. image

The global event_loop is moved to thread.local in 0.18.4.

keijack avatar Oct 09 '22 09:10 keijack

Close for long time silence.

keijack avatar Nov 07 '22 10:11 keijack