2 Stimmen

Drei Funktionen in regelmäßigen Abständen ausführen - Multithreading? Multiprocessing?

Ich hatte eine sehr ähnliche Frage gestellt früher aber der Projektumfang wächst schnell über das hinaus, was ich mit Signalen erreichen kann (denke ich). Grundsätzlich wird mein Programm Dinge in drei verschiedenen Intervallen tun; eine Funktion alle 15 Sekunden, eine Funktion in einem konfigurierbaren Intervall (5 bis 60 Sekunden, im Allgemeinen) und eine Funktion alle ein oder zwei Stunden.

Von einem intuitiven Standpunkt aus scheint es, als ob mehrere signal.signal()-Aufrufe mit separaten Funktionen mich nicht sehr weit bringen würden: ein ITIMER_REAL-Timer gibt nur ein Signal aus - SIGALRM, und daher gäbe es keine Möglichkeit zu unterscheiden, welcher Itimer das Signal ausgibt. Da die 15-Sekunden-Intervall-Funktion braucht unabhängig von den anderen Funktionen ausgeführt werden soll, bleibt mir die Wahl zwischen Multithreading und Multiprocessing.

Ich neige in Richtung Multiprocessing, in der Hoffnung, dass ich nur drei Kindprozesse, jeder mit seinen eigenen Signal / Timer-Intervalle, und lassen Sie sie jeweils ihre Arbeit in ihrer Freizeit zu tun spawnen kann. Ist dies machbar? Wenn nicht, was wäre der beste Weg, um diese drei Funktionen in den gewünschten Intervallen laufen zu lassen?

3voto

Fred Foo Punkte 341230

Das ist machbar, aber wenn die drei Schleifen keine schweren Berechnungen durchführen (die Multicore-Leistung benötigen), könnten Sie genauso gut drei Threads starten.

Oder Sie könnten dies in einer einzigen Schleife mit einer Prioritäts-Warteschlange . Drücken Sie (time, task) Paare in die Warteschlange, wobei task ist eine Beschreibung der zu erledigenden Aufgabe. Dann, in einer Schleife:

  • einen Artikel öffnen
  • warten, bis die angegebene time ist fällig
  • die Aufgabe erfüllen
  • die Aufgabe nach 5 Sekunden, 15 Minuten, 2 Stunden oder wie auch immer neu planen, indem ein neues Element in die Warteschlange gestellt wird.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X