PubSub
Note
Nástroj pro předávání hodnot mezi nezávislými komponenty v rámci projektu a to i v samostatně běžících vláknech. Pracuje na principu publish and subscribe. Fork z basecue/micropython-pubsub.
Zdrojový kód knihovny: ./lib/pubsub.py
Základ práce: jedno vlákno (nebo část programu) publikuje získané hodnoty metodou publish
kde parametrem je topic
a hodnota value
. Napříkladpubsub.publish('topic', value)
. (value může být libovolný objekt). V jednoduché ukázce jednou za vteřinu generujeme náhodná čísla, která "publikujeme". (pozor, používáme while True:
- je to blokující, lepší je použít timer
)
Základem je import pubsub
a pak dekorátor @pubsub.subscriber("value")
pro subscribe a pubsub.publish('value', value)
pro publish.
V jednom programu
Tato jednoduchá ukázka pouze naznačuje možnost funkčního použití. Její univerzálnost a robustnost oceníte až při rozsáhlejších projektech.
from time import sleep
from os import urandom
import pubsub
from utils.octopus import disp7_init
print("display7 init")
d7 = disp7_init() # 8 x 7segment display init
@pubsub.subscriber("value")
def display_num(value):
d7.show(value)
print("start ps_random")
while True:
value = int(urandom(1)[0])
print("rnd.: ", value)
pubsub.publish('value', value)
sleep(1)
Samostatné programy / thready / moduly
Jeden program nebo dva thready. Možnost testovat jako dva v threadu spustitelné programy:
import pubsub
from utils.octopus import disp7_init
d7 = disp7_init() # 8 x 7segment display init
@pubsub.subscriber("value")
def display_num(value):
d7.show(value)
from time import sleep
from os import urandom
import pubsub
print("start: ps_random.py")
while True:
value = int(urandom(1)[0])
print("rnd.: ", value)
pubsub.publish('value', value)
sleep(1)
Zjednodušení na maximum
Jak použití pub sub zjednoduší program? Chceme v pravidelném intervalu zobrazovat náhodná čísla na displeji. Jde to jednodušeji?
import octopus.ps_display7
import octopus.ps_timer_rnd
Zdrojové kódy k použitým octopus pub sub modulům také nejsou složité: