2016-07-27 7 views
0

Ich hole alle 5 Sekunden Daten von einem Server, um eine Liste zu aktualisieren. Außerdem höre ich mir auch einen Knopfdruck an.Mehrere Runloops erstellen, die Daten gemeinsam nutzen

Also was ich brauche, sind zwei unabhängige Schleifen (ziehen Daten und hören auf eine physische Schaltfläche auf einem Raspberry Pi über GPIO) und beide benötigen Zugriff auf eine gemeinsame Liste.

Für nur eine Schleife könnte ich eine einfache while = True mit einer time.sleep(5.0) verwenden, aber wie kann ich mit zwei unendlichen Lauf-Schleifen zur gleichen Zeit arbeiten, die beide auf eine gemeinsame Variable zugreifen und sich nicht gegenseitig blockieren? Auch sollte der Knopf immer reaktionsbereit sein.

Wie kann ich das tun? Brauche ich Threads dafür?

+0

Nicht unbedingt tun könnte, könnte man 'asyncio' –

+0

@WayneWerner verwende ich bin auf Python 2.7. Ist asyncio noch eine Option? – Bernd

+0

Wenn Sie 'asyncio' in Python 2.7 verwenden möchten, können Sie [Trollius] (https://pypi.python.org/pypi/trollius) verwenden –

Antwort

0

Also, wenn ich Sie richtig verstehe, ist das Problem, dass Sie eine Schaltfläche überprüfen möchten Schleife, die alle sagen, Millisekunde, während Ihre Server-Abfrage Schleife sollte nur alle 5 Sekunden ausgeführt werden. Ist das korrekt?

Die einfache Lösung wäre, den Server-Abrufcode innerhalb der schnelleren Schleife auszuführen, sobald 5 Sekunden seit der letzten Abfrage verstrichen sind. Wenn die Abfrage zeitraubend ist und es zu einem Problem wird, dass die Schaltfläche Erkennung während der Abfrage blockiert ist, denke ich, dass Sie die beiden Schleifen in parallelen Prozessen ausführen müssen. Dies macht das Problem jedoch komplexer, insbesondere da Ressourcen gemeinsam genutzt werden.

Um das Intervall von 5 Sekunden in der schnellen Schleife zu implementieren, können Sie so etwas wie

import datetime 

# [...] other code 

# inside fast loop 
if last_poll_time - datetime.now() >= 5: 
    poll_again() 
    last_poll_time = datetime.now() 
Verwandte Themen