Skip to content

Commit

Permalink
Documentation update: Initial version of 'asyncio in plugins'
Browse files Browse the repository at this point in the history
  • Loading branch information
msinn committed Nov 15, 2023
1 parent 847ea6c commit 855454d
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 2 deletions.
50 changes: 50 additions & 0 deletions doc/user/source/entwicklung/plugins/async_in_plugins.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@

.. index:: AsyncIO in Plugins
.. index:: Plugin; AsyncIO

.. role:: redsup
.. role:: bluesup

================================
AsyncIO in Plugins :redsup:`neu`
================================

SmartHomeNG ist eine Thread-basierte Anwendung. Mit Version 3.4 kam eine initiale Unterstützung von asynchronem
In- und Output (asyncio) in Python hinzu. Asyncio ist ein Teil der Standard Bibliothek von Python. Mit den ersten
Releases gab es noch eine größere Anzahl Änderungen am asyncio API. Seit Python 3.8 hat asyncio einen recht stabilen
Zustand erreicht.

Viele der neueren Packages für Python nutzen asyncio. Diese Packages in Plugins zu integrieren ist nicht ohne Haken
und Ösen. Im Folgenden sind einige Informationen zusammengestellt, um in einem (tread-basierten) Plugin asyncio zu
nutzen.

|
Methoden des Plugins
====================

Eine Reihe von Methoden eines Plugins werden von außerhalb des Plugins aufgerufen. Diese Aufrufe erfolgen in
unterschiedlichen Threads. die Eventloop von asyncio läuft dem gegenüber nur in einem Thread

.. csv-table:: Threads in denen Plugin Methoden ausgeführt werden
:header: "Methode des Plugins", "Aufruf erfolgt in Thread"

"init()", "Main Thread von SmartHomeNG"
"parse_item()", "Main Thread von SmartHomeNG"
"run(), beim Start von SmartHomeNG", "Thread des Plugins"
"stop(), beim Start von SmartHomeNG", "Main Thread von SmartHomeNG"
"poll_device()", "ein Thread Worker-Pool des Schedulers"

|
Asyncio und Threads kombinieren
===============================

Bei der Kombination von Threads und asyncio gibt es zwei zu berücksichtigende Übergänge:

- Aufruf von IO-Blocking Code in async Co-Routinen
- Aufruf von asyncio Code in einem Thread basierte Programm

Eine gut Beschreibung zu den Herausforderungen und Lösungen findet sich in dem Artikel
`Combining Traditional Thread-Based Code and Asyncio in Python <https://https://www.dataleadsfuture.com/combining-traditional-thread-based-code-and-asyncio-in-python/>`__

1 change: 0 additions & 1 deletion doc/user/source/entwicklung/plugins/plugin_checker.rst
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@

.. index:: Plugin-Checker
.. index:: Plugin Checker
.. index:: check_plugin.py

Expand Down
2 changes: 1 addition & 1 deletion doc/user/source/entwicklung/plugins/plugins.rst
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,4 @@ Abschnitt und den links in der Navigation verlinkten Seiten gefunden werden.
entwicklungsrichtlinien.rst
plugin_checker.rst
kurzanleitung/kurzanleitung.rst

async_in_plugins.rst

0 comments on commit 855454d

Please sign in to comment.