Skip to content

server_stop() - RuntimeError: Event loop is closed #148

@SadSack963

Description

@SadSack963

Firstly, my compliments to everyone involved on an easily implemented and fast 3D animation package for my favourite programming language.

vpython7 version:   7.6.2
Python version:     3.9.6
IDE:                PyCharm 2021.2 (Community Edition)
OS:                 Windows 10 version 20H2
Browser:            Firefox version 93.0

My test program:

from vpython import *
from vpython.no_notebook import stop_server


def shutdown(keyup_event):
    if keyup_event.key == 'x':
        print('You pressed "x"')
        global running
        running = False
        stop_server()


box(
    pos=vector(0, 0, 0),
    size=vector(1, 1, 1),
    color=color.gray(1),
    opacity=0.1
)

scene.bind('keyup', shutdown)
running = True

while running:
    rate(30)

The web page does close and the program stops, but I still get an error.

E:\Python\Projects\3D-vpython\venv_9\Scripts\python.exe E:/Python/Projects/3D-vpython/test_02.py
You pressed "x"
Task was destroyed but it is pending!
task: <Task pending name='Task-43' coro=<WSserver.onMessage() running at E:\Python\Projects\3D-vpython\venv_9\lib\site-packages\vpython\no_notebook.py:214> wait_for=<Future finished result=None>>
Task was destroyed but it is pending!
task: <Task pending name='Task-4' coro=<IocpProactor.accept.<locals>.accept_coro() running at D:\Users\John\AppData\Local\Programs\Python\Python39\lib\asyncio\windows_events.py:566> wait_for=<_OverlappedFuture cancelled>>
Exception ignored in: <function _ProactorBasePipeTransport.__del__ at 0x0000018339B28700>
Traceback (most recent call last):
  File "D:\Users\John\AppData\Local\Programs\Python\Python39\lib\asyncio\proactor_events.py", line 116, in __del__
  File "D:\Users\John\AppData\Local\Programs\Python\Python39\lib\asyncio\proactor_events.py", line 108, in close
  File "D:\Users\John\AppData\Local\Programs\Python\Python39\lib\asyncio\base_events.py", line 746, in call_soon
  File "D:\Users\John\AppData\Local\Programs\Python\Python39\lib\asyncio\base_events.py", line 510, in _check_closed
RuntimeError: Event loop is closed

Process finished with exit code 0

It seems that stop_server() doesn't complete because if I change the sequence to

def shutdown(keyup_event):
    if keyup_event.key == 'x':
        print('You pressed "x"')
        stop_server()
        global running
        running = False

then the browser page remains open and the program does not stop.

I have just tried this solution: sfaleron's solution and it works for me too.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions