Mycroft-core: ошибка pyee | исключение, вызывающее обратный вызов для<future at="" state="finished" raised="" keyerror=""/>

Созданный на 16 сент. 2020  ·  10Комментарии  ·  Источник: MycroftAI/mycroft-core

Как отправить проблему в репозиторий Майкрофт

Отправляя проблему в репозиторий Mycroft, следуйте этим инструкциям, чтобы мы могли вам помочь.

Четко определите программное обеспечение, оборудование и версию, которую вы используете

Например:

  • Я использую пикрофт
  • С последней версией
  • Со стандартным Wake Word

Постарайтесь предоставить шаги, которые мы можем использовать для воспроизведения проблемы.

Например:

  1. Откройте mycroft cli
  2. подождите (приходит примерно каждые 30 секунд)

Предоставьте файлы журнала или другой вывод, чтобы помочь нам увидеть ошибку

20:00:14.407 | ERROR | 949 | concurrent.futures | exception calling callback for <Future at 0x737d7b10 state=finished raised KeyError>Traceback (most recent call last): File "/usr/lib/python3.7/concurrent/futures/_base.py", line 324, in _invoke_callbacks callback(self) File "/home/pi/mycroft-core/.venv/lib/python3.7/site-packages/pyee/_executor.py", line 60, in _callback self.emit('error', exc) File "/home/pi/mycroft-core/.venv/lib/python3.7/site-packages/pyee/_base.py", line 111, in emit self._emit_handle_potential_error(event, args[0] if args else None) File "/home/pi/mycroft-core/.venv/lib/python3.7/site-packages/pyee/_base.py", line 83, in _emit_handle_potential_error raise error File "/usr/lib/python3.7/concurrent/futures/thread.py", line 57, in run result = self.fn(*self.args, **self.kwargs) File "/home/pi/mycroft-core/.venv/lib/python3.7/site-packages/pyee/_base.py", line 121, in g self.remove_listener(event, f) File "/home/pi/mycroft-core/.venv/lib/python3.7/site-packages/pyee/_base.py", line 136, in remove_listener self._events[event].pop(f)KeyError: <bound method MessageWaiter._handler of <mycroft.messagebus.client.client.MessageWaiter object at 0xb2e8fd90>> 20:00:14.408 | ERROR | 949 | concurrent.futures | exception calling callback for <Future at 0x737d79d0 state=finished raised KeyError>Traceback (most recent call last): File "/usr/lib/python3.7/concurrent/futures/_base.py", line 324, in _invoke_callbacks callback(self) File "/home/pi/mycroft-core/.venv/lib/python3.7/site-packages/pyee/_executor.py", line 60, in _callback self.emit('error', exc) File "/home/pi/mycroft-core/.venv/lib/python3.7/site-packages/pyee/_base.py", line 111, in emit self._emit_handle_potential_error(event, args[0] if args else None) File "/home/pi/mycroft-core/.venv/lib/python3.7/site-packages/pyee/_base.py", line 83, in _emit_handle_potential_error raise error File "/usr/lib/python3.7/concurrent/futures/thread.py", line 57, in run result = self.fn(*self.args, **self.kwargs) File "/home/pi/mycroft-core/.venv/lib/python3.7/site-packages/pyee/_base.py", line 121, in g self.remove_listener(event, f) File "/home/pi/mycroft-core/.venv/lib/python3.7/site-packages/pyee/_base.py", line 136, in remove_listener self._events[event].pop(f)KeyError: <bound method MessageWaiter._handler of <mycroft.messagebus.client.client.MessageWaiter object at 0x7514b7b0>>

image

hard Bug - complex help wanted

Самый полезный комментарий

Хорошо, исправление моего теоретического наблюдения было объединено в pyee и выпущено как 8.1.0. Я подготовлю PR здесь и на Adapt, чтобы синхронизировать версии, и мы посмотрим, решит ли это проблему. В противном случае есть и другая проблема :)

Все 10 Комментарий

Не могли бы вы попытаться установить уровень журнала для отладки, введя команду cli :log level debug чтобы узнать, дает ли она дополнительную информацию о том, что он пытается сделать, прямо до появления ошибки?

Похоже, что ошибка отображается, когда wait_for_response() или wait_for_message() пытается удалить обработчик, который уже был удален. Посмотрим, смогу ли я спровоцировать это.

Screen Capture_deepin-terminal_20200917141521
Screen Capture_deepin-terminal_20200917141536
Screen Capture_deepin-terminal_20200917141604

Черт, никакой дополнительной информации, если я правильно читаю эти скриншоты. Вчера воспроизвести не удалось, но попробую еще.

@forslund извините: /

Просто идея здесь. Если пользователь или какой-либо навык устанавливает пакет pip "mycroft-messagebus-client", возникает конфликт версий pyee, поскольку messagebus-client все еще использует pyee == 5.0.1

https://github.com/MycroftAI/mycroft-messagebus-client/pull/4

Я вижу это при установке общесистемной опции --user. Не уверен, встречается ли это также в веневе. Возможно, это связано, поскольку речь идет о Пайи.

Если это произойдет, я верю (после тестирования), что возникают ошибки ImportErrors, поскольку класс ExecutorEventEmitter недоступен.

После некоторого дополнительного исследования и разговора с Ake, я думаю, что это может быть метод MessageBusClient.emitter.once который пытается отключить функцию обратного вызова от события, которое уже было очищено.

Нам все еще нужно это проверить, и, если это правда, возможно, убедиться, что каждая зарегистрированная функция уникальна.

Итак, я провел небольшое тестирование, и каждая зарегистрированная функция уникальна. Я думаю, что проблема здесь не является фатальной, так как исключение перехватывается и сообщается.

Мои тесты заставляют меня поверить, что проблема заключается в состоянии гонки между тайм-аутом (который удаляет обработчик) и автоматическим удалением обработчика pyee once . Это может быть что-то, о чем нам нужно сообщить вверх по течению в pyee ...

Я сам случайно видел ошибку и добавил дополнительные записи, чтобы узнать, могу ли я точно определить, где в коде mycroft она запускается. Где-то в процессе навыков ...

Я открыл вопрос вверх по течению.

Хорошо, исправление моего теоретического наблюдения было объединено в pyee и выпущено как 8.1.0. Я подготовлю PR здесь и на Adapt, чтобы синхронизировать версии, и мы посмотрим, решит ли это проблему. В противном случае есть и другая проблема :)

Была ли эта страница полезной?
0 / 5 - 0 рейтинги