logo 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é: