CronEvents (funktioniert ab 1.15)

Dieser Bereich dient dazu, eure Tricks und Erweiterungen vorzustellen, damit diese auch andere Anwender nutzen können. // This area can be used to publish your tricks and extensions to the APF to be used by other developers.
Benutzeravatar
dave
Beiträge: 903
Registriert: 04.02.2011, 19:03:57
Wohnort: Berlin
Kontaktdaten:

Re: CronEvents (funktioniert ab 1.15)

Beitrag von dave » 29.06.2012, 09:55:40

Sorry, leider nicht. Durch andere Baustellen und Spätschicht im Hauptberuf habe ich einfach nu wenig Zeit und komme "zu nichts". Das nervt mich alles ganz schön ab ... und auf Arbeit sitze ich nur sinnlos rum und wiess nicht, was ich sinnvolles machen soll ;)

Benutzeravatar
MrNiceGuy
Beiträge: 749
Registriert: 03.02.2009, 16:49:42
Wohnort: Nienburg / Weser

Re: CronEvents (funktioniert ab 1.15)

Beitrag von MrNiceGuy » 17.07.2012, 06:25:27

Wow, ein wirklich interessanter Ansatz und aufgrund der verwendeten Erweiterung vermute ich auch parallelisierte Verarbeitung implementiert. Leider konnte ich es noch nicht testen bisher, aber mir fehlt irgendwie noch eine Information:

Du sagst zwar, dass es sich um Verarbeitung mittels Cron handelt, wenn ich aber das Script sehe könnte es sich auch um ein stetig laufendes Script handeln, das selbstständig nach zu verarbeitenden Jobs sucht und diese dann ausführt?! Ich würde dann also im Script selber nur einen CronJob registrieren!?

Oder registriere ich einen Cronjob im Code und ein Cronjob auf dem System ruft regelmäßig das script cron.php auf und arbeitet eventuell parallel auftretende Jobs ab?

Achja und der Sinn der Prioritäten stellte sich für mich irgendwie noch nicht ganz so raus (vor Allem das mit den unterschiedlich großen Bereichen...)

@dave: Es gibt verschiedene Möglichkeiten ein PHP-Script aufzurufen. Der direkte Aufruf erfolgt in der Regel mit SHEBANG oder eben einem vorangestellten "php" im Befehl. Alternativ - und das ist je nach Anwendungsfall auch das sinnvollste - kann man auhc ein kleines Shell-Script schreiben, dass einen erst in den jeweiligen Ordner wechseln lässt, in dem das Script ausgeführt werden soll und dann das Script selber erst aufruft. Ansonsten kann es sein, dass du immer absolute Pfade verwenden musst - je nach Anwendungsfall.

Ein solches Start-Script könnte so aussehen "Bsp: startephpscript.sh":

Code: Alles auswählen

#!/bin/bash
cd /pfad/zum/script
php -f script.php >> logs/script.log 2>> logs/script.err
Hat den Vorteil, dass du nur das Script aufrufen musst und dir keine Gedanken um Pfad- und Log-Datei-Angaben machen musst.
There are only 10 Types of people in the world:
Those who understand binary and those who don't.

Megger
Beiträge: 1233
Registriert: 04.11.2008, 10:57:37

Re: CronEvents (funktioniert ab 1.15)

Beitrag von Megger » 17.07.2012, 11:41:19

Du sagst zwar, dass es sich um Verarbeitung mittels Cron handelt, wenn ich aber das Script sehe könnte es sich auch um ein stetig laufendes Script handeln, das selbstständig nach zu verarbeitenden Jobs sucht und diese dann ausführt?! Ich würde dann also im Script selber nur einen CronJob registrieren!?
Es ist eigentlich beides möglich, da du das Verhalten über die Konfigurationsdatei steuern kannst! Standardmäßig ist es so eingestellt, dass ein Cronjob das Script aufruft, dieses sich selbst eine Weile am Leben erhält und dann wieder von einem Cron gestartet wird! Aber du kannst es auch so einstellen, dass das Script nur vom Cron aufgerufen wird und danach sich gleich wieder beendet!
Man könnte das Script natürlich auch "unendlich" sich selbst am Leben erhalten, aber da habe ich schlechte Erfahrungen mit Speicherverwaltung usw. gemacht! Das Grundskript ansich sollte das ohne Probleme mitmachen (noch nicht getestet) allerdings schreibt der Entwickler ja selber, wie ein Event behandelt werden soll und da muss dieser dann schon extrem aufpassen!

Also im Grunde sorgt der Cronjob nur dafür, dass das Script am Leben bleibt bzw. neugestartet wird! Bei mir habe ich es halt extrem eingestellt, sodass der cronjob jede Minute läuft und das Script hat 1 Minute "Lebenszeit"! Je nach Projekt kann man dies natürlich anpassen z.B. dass der cronjob alle 5 Minuten startet und das Script eine 5-minütige "Lebenszeit" hat, allerdings muss man dann auch beachten, dass es passieren kann, dass 5 Minuten lang kein Script läuft, weil irgendetwas schiefgelaufen ist oder so
Achja und der Sinn der Prioritäten stellte sich für mich irgendwie noch nicht ganz so raus (vor Allem das mit den unterschiedlich großen Bereichen...)
Vorher war es bei mir so, dass es keine parallele Abarbeitung gab, die Events hatten auch Prioritäten und wurden entsprechend behandelt. Wenn nun allerdings die Abarbeitung eines niedrigprioritäts Events länger dauert, dann wurde die ganze Abarbeitung blockiert! Deswegen gibt es die parallele Abarbeitung, dadurch kann ein Worker noch beschäftigt sein, während die anderen Worker sich schon wieder um entsprechende Events kümmern!
Die unterschiedlichen Bereiche sind dafür da, dass die Worker, die für höher-priorisierte Events zuständig sind, ansich weniger Bereiche abdecken müssen, dadurch für diesen Bereich allerdings wieder schneller zur Verfügung stehen!
Man könnte auch einfach allen Workern die gleichen Bereiche zuweisen (in CronDispatcher eine protected function -> getPriorityAreas()) allerdings habe ich die Erfahrung gemacht, dass die Events mit niedriger Priorität auch mal länger brauchen können bzw. mehr Berechnungen durchführen oder was auch immer! Dann hat man vielleicht wieder das Problem, dass alle Worker beschäftigt sind und die Events mit hoher Priorität sich stapeln! Dies kann natürlich auch mit der aktuellen Implementierung passieren und sehr wahrscheinlich ist es von Projekt zu Projekt unterschiedlich. Deswegen war diese Entscheidung eher auf Erfahrungen bezogen die ich mit meinem alten System gemacht habe!
Tutorial: Browsergame mit dem APF (Die ersten Parts handeln von Installation und Inbetriebnahme des APFs, deswegen sicherlich auch für alle Nicht-Browsergame-Programmierer interessant)

APF-Version
  • Entwicklung: 2.0
  • Produktiv: 1.15

Benutzeravatar
MrNiceGuy
Beiträge: 749
Registriert: 03.02.2009, 16:49:42
Wohnort: Nienburg / Weser

Re: CronEvents (funktioniert ab 1.15)

Beitrag von MrNiceGuy » 27.07.2012, 06:12:09

Hmm... Der Ansatz der Parallelisierung ist mir schon klar - und die daraus resultierenden Vorteile auch - aber wenn die parallel abgearbeitet werden: Wozu dann die Bereiche? Irgendwie habe ich das immernoch nicht gerallt... Aber vielleicht hilft es mir, wenn ich deinen Code mal in meinem Kopf revue passieren lasse :)

Was die Verarbeitung ansich angeht: OK, also doch "nur" ein Cronjob. Da stellt sich mir halt gleich die Frage, ob und wie du verhinderst, dass ein Job, der z.B. länger dauert als eine Minute noch bis zum Ende ausgeführt wird? Ich hoffe jedenfalls, dass du die Lebensdauer nicht durch set_time_limit() begrenzt!? Und wenn ein job länger dauert, würde er dann erneut aufgerufen, weil er noch nicht verarbeitet ist?

Geiler wäre natürlich eine Art Daemon, den man nutzen könnte (per TCP-Port oder Unix-Socket), um das zu erreichen. Also eine Art Cron-Daemon, der grundsätzlich also zeitgesteuert Dinge ausführt, aber auch Befehle entgegen nehmen kann... Das wäre doch mal was. Aber in PHP wäre das wohl eher der falsche Ansatz.
There are only 10 Types of people in the world:
Those who understand binary and those who don't.

Megger
Beiträge: 1233
Registriert: 04.11.2008, 10:57:37

Re: CronEvents (funktioniert ab 1.15)

Beitrag von Megger » 27.07.2012, 10:08:36

Sobald ein CronDispatcher gestartet ist, setzt dieser eine Datei und holt sich exclusives Lese und Schreibrecht! Wenn nun der Dispatcher nicht fertig ist und per Cron ein neuer Dispatcher gestartet wird, dann erhält dieser nicht das lese und schreibrecht und wird deswegen nicht gestartet! Allerdings wird auch versucht 30 Sekunden lang dieses Recht zu erlangen und erst danach abgebrochen!
Wozu dann die Bereiche? Irgendwie habe ich das immernoch nicht gerallt
Es ist eigentlich nur ein Erfahrungswert, damit habe ich bisher die besten Ergebnisse in der Ausführung erzählt

Edit:
Geiler wäre natürlich eine Art Daemon
Sicherlich wäre das schonmal nicht schlecht, allerdings dann wahrscheinlich auch gleich wieder ungemein schwieriger umzusetzen
Tutorial: Browsergame mit dem APF (Die ersten Parts handeln von Installation und Inbetriebnahme des APFs, deswegen sicherlich auch für alle Nicht-Browsergame-Programmierer interessant)

APF-Version
  • Entwicklung: 2.0
  • Produktiv: 1.15

welworx
Beiträge: 620
Registriert: 27.09.2010, 19:29:44

Re: CronEvents (funktioniert ab 1.15)

Beitrag von welworx » 28.11.2012, 01:35:57

Hey,

gibts schon was neues von der DOKU? Hab nix im Wiki oder unter den Komponenten finden können.

Ist weiters die Version die du zu Beginn als Zip Datei bereit gestellt hast die aktuelle?

Muss mich gerade mit dem ganzen Event Zeugs beschäftigen und würde mir daher gerne deine Erweiterung ansehen und hoffentlich auch nutzen :D

LG Werner

Megger
Beiträge: 1233
Registriert: 04.11.2008, 10:57:37

Re: CronEvents (funktioniert ab 1.15)

Beitrag von Megger » 28.11.2012, 11:30:59

Hi

Ja, dass ist die aktuelle Version und es gibt noch keine genaue Dokumentation dazu, da ich mich erst nochmal mit dem Thema auseinandersetzen will und dem ganzen auch eine Oberfläche spendieren will, sodass man zum Beispiel sieht, welche Worker momentan aktiv sind usw. Aber wenn du nun an einer Lösung arbeitest, dann kann man das vielleicht alles kombinieren, sodass es nicht unzählige Implemntierungen gibt
Tutorial: Browsergame mit dem APF (Die ersten Parts handeln von Installation und Inbetriebnahme des APFs, deswegen sicherlich auch für alle Nicht-Browsergame-Programmierer interessant)

APF-Version
  • Entwicklung: 2.0
  • Produktiv: 1.15

welworx
Beiträge: 620
Registriert: 27.09.2010, 19:29:44

Re: CronEvents (funktioniert ab 1.15)

Beitrag von welworx » 28.11.2012, 14:54:31

Hi,

halte es auch für sinnvoll daraus ein core modul zu schaffen.

LG Werner

welworx
Beiträge: 620
Registriert: 27.09.2010, 19:29:44

Re: CronEvents (funktioniert ab 1.15)

Beitrag von welworx » 30.11.2012, 02:50:14

nix für ungut, aber im zuge dessen würde ich dann auch den namen auf eventhandler ändern, damit man nicht vom Wort cron abgeschreckt wird ;)

Megger
Beiträge: 1233
Registriert: 04.11.2008, 10:57:37

Re: CronEvents (funktioniert ab 1.15)

Beitrag von Megger » 30.11.2012, 11:32:51

Ja ich brauchte einen Namen, da meine Erweiterung anders arbeitet wie die Erweiterung von Screeze.

Seine Erweiterung ist mehr dafür gedacht innerhalb eines Requests Events zu bearbeiten
Meine Erweiterung ist mehr für Hintergrundevents gedacht

Die Frage ist, planst du denn etwas wie eine cron implemtierung ein? Also ein Dispatcher der im Hintergrund läuft?
Tutorial: Browsergame mit dem APF (Die ersten Parts handeln von Installation und Inbetriebnahme des APFs, deswegen sicherlich auch für alle Nicht-Browsergame-Programmierer interessant)

APF-Version
  • Entwicklung: 2.0
  • Produktiv: 1.15

welworx
Beiträge: 620
Registriert: 27.09.2010, 19:29:44

Re: CronEvents (funktioniert ab 1.15)

Beitrag von welworx » 30.11.2012, 12:39:58

Hatte eigentlich vor, dass es möglich sein soll die events auch für eine spätere bearbeitung zu markieren, sprich sie in die db zu schieben. Das, kombiniert mit einer priorisierung, sollte eigentlich einen Dispatcher, der mittels Cron aufgerufen wird, recht leicht ermöglichen. Soweit ich das verstanden hab, kann das ja deine Umsetztung bereits.

Megger
Beiträge: 1233
Registriert: 04.11.2008, 10:57:37

Re: CronEvents (funktioniert ab 1.15)

Beitrag von Megger » 30.11.2012, 12:43:32

Jep, dafür ist meine Erweiterung gedacht, zusammen mit dem parallelen Abarbeiten der Eventliste (habe bei mir Events, die Berechnungen anstoßen, die länger dauern, die würden dann das ganze Eventhandling blockieren, bei paralleler Abarbeitung wird nur einer von mehreren Workern blockiert)
Tutorial: Browsergame mit dem APF (Die ersten Parts handeln von Installation und Inbetriebnahme des APFs, deswegen sicherlich auch für alle Nicht-Browsergame-Programmierer interessant)

APF-Version
  • Entwicklung: 2.0
  • Produktiv: 1.15

welworx
Beiträge: 620
Registriert: 27.09.2010, 19:29:44

Re: CronEvents (funktioniert ab 1.15)

Beitrag von welworx » 30.11.2012, 12:53:01

gut dann hab ich das richtig verstanden ;).

Zusätzlich hatte ich auch vor, dass man bei jedem event optional auch die ausfürhungsstartzeit angeben kann. Somit kann man das noch mehr steuern.

Siehst du noch irgendwas, was dagegenspricht das zu kombinieren?

Megger
Beiträge: 1233
Registriert: 04.11.2008, 10:57:37

Re: CronEvents (funktioniert ab 1.15)

Beitrag von Megger » 30.11.2012, 13:00:02

Nein, ich bin sehr gespannt auf die Umsetzung
Tutorial: Browsergame mit dem APF (Die ersten Parts handeln von Installation und Inbetriebnahme des APFs, deswegen sicherlich auch für alle Nicht-Browsergame-Programmierer interessant)

APF-Version
  • Entwicklung: 2.0
  • Produktiv: 1.15

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast