Как я могу устранить эту ошибку, используя библиотеку websocket? - PullRequest
1 голос
/ 08 июля 2019

Я собрал следующий код из примера в https://websockets.readthedocs.io/en/stable/intro.html#python-lt-36 Это, без сомнения, было бы проще в Python 3.6+, но, к сожалению, используемый мной дистрибутив (Raspbian) содержит Python 3.5.3.Понятно, что я сделал что-то не так, но я не знаю что.Что я сделал не так, и есть ли более простой подход?

def my_callback1(channel):  # Down Arrow Pressed
    Return, Cursor = update.upArrow()
    if Return:
        message = "Control, " + str(Cursor)
        asyncio.get_event_loop().run_until_complete(SendMessage(message))

@asyncio.coroutine
def SendMessage(message):
    websocket = yield from websockets.connect('ws://localhost:8000')
    try:
        yield from websocket.send(message)
    finally:
        yield from websocket.close()

GPIO.add_event_detect(pinsarrow[0], GPIO.RISING, callback=my_callback1, bouncetime=bTime)  # Down Arrow
Traceback (most recent call last):
  File "/usr/local/sbin/button.py", line 25, in my_callback1
    asyncio.get_event_loop().run_until_complete(SendMessage(message))
  File "/usr/lib/python3.5/asyncio/events.py", line 671, in get_event_loop
    return get_event_loop_policy().get_event_loop()
  File "/usr/lib/python3.5/asyncio/events.py", line 583, in get_event_loop
    % threading.current_thread().name)
RuntimeError: There is no current event loop in thread 'Dummy-1'.

1 Ответ

0 голосов
/ 09 июля 2019

Вот полное решение, благодаря shmee:

def my_callback1(channel):  # Down Arrow Pressed
    Return, Cursor = update.downArrow()
    if Return:
        message = "Control, " + str(Cursor)
        loop = asyncio.new_event_loop()
        asyncio.set_event_loop(loop)
        loop.run_until_complete(SendMessage(message))
@asyncio.coroutine
def SendMessage(message):
    websocket = yield from websockets.connect('ws://localhost:8000')
    try:
        yield from websocket.send(message)
    finally:
        yield from websocket.close()

GPIO.add_event_detect(pinsarrow[0], GPIO.RISING, callback=my_callback1, bouncetime=bTime)  # Down Arrow
...