Python - komunikacia medzi procesmi

Sekcia: Programovanie 02.10.2015 | 17:13
Bobo   Návštevník

Ahojte, mam jednoduchy script. Ked je na vstupe 0, tak sa rozsvieti LED a opacne. Zaroven sledujem, ci je tato funkcia povolena. To zistujem z databazy. No a toto citanie z databazy mi spomaluje to ovladanie. Napada niekoho ako toto vyriesit a zmenit komunikaciu medzi procesmi ? Mna napadlo, ze obsah databazy by sa ukladal do nejakej premeny, ktora by sa aktualizovala napr. kazdu minutu. Po Pri zmene stavu na vstupe by sa precitala tato premenna a je jedno, ci su v nej aktualne data alebo nie. Skratka v tej premennej by boli nejake data neustale.

P.S.: neviem sem vobec pridat kod. 

    • RE: Python - komunikacia medzi procesmi 02.10.2015 | 17:15
      Avatar Bobo   Návštevník

      Tu je ten kod

      https://drive.google.com/file/d/0B_OOjYgNKTK-M0w2RjRSY2swc1E/view?usp=drivesdk

    • RE: Python - komunikacia medzi procesmi 02.10.2015 | 17:27
      Avatar Bobo   Návštevník

      Tak teraz som zistil, ze ten kod,ktory som sem dal funguje ale ako nahle odkomentujem q.queue.clear(), tak vtedy je to pomale.

      • RE: Python - komunikacia medzi procesmi 02.10.2015 | 17:36
        Avatar Bobo   Návštevník

        Tak s tym queue to nefunguje dobre. queue.clear() tammusi byt ale vtedy je to pomale. 

    • RE: Python - komunikacia medzi procesmi 03.10.2015 | 08:44
      Avatar Miroslav Bendík Gentoo  Administrátor

      Thready v pythone nefungujú paralelne. Kód v jednom threade blokuje kód v druhom threade (ak nie je použitý interpret ako PyPy ktorý umožňuje skutočný paralelný beh). Ak je problém v rýchlosti prístupu k db tak thread to nevyrieši.

      Aby kód bežal skutočne paralelne musí sa použiť modul multiprocessing. A pozor aj na Queue, obyčajné volanie queue.get zablokuje proces kým podproces nevloží niečo do queue. Pre neblokujúce volanie je queue.get(block=False).

      • RE: Python - komunikacia medzi procesmi 03.10.2015 | 09:48
        Avatar Zer0 Blbuntu 16.04 gnome flashback | Debian 8 | MIUI 9  Používateľ

        Alebo:

        if queue.empty()==False():

            nieco=queue.get()