Ankündigung

Einklappen
Keine Ankündigung bisher.

Interaktion zwischen Python und PHP?

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Interaktion zwischen Python und PHP?

    Guten Tag an Alle,

    ich habe mir gerade mal kurz Python angeguckt, weil ich ein kleines Projekt vor habe.
    Und zwar würde ich gerne ein kleines Python Programm skripten, das eine Aktion mit meiner MySQL Datenbank erledigt.
    Warum gerade Python?! Ich habe erst gedacht, es nur mit PHP zu machen, aber habe festgestellt, dass PHP kein multithreading unterstützt. Dabei kam ich dann auf Python.
    Dieses kleine Programm soll über eine längere Zeit (ca. 1 Stunde laufen)
    Ist es nun möglich dieses Python Programm mit PHP zu starten und wieder zu beenden?

  • #2
    starten JA .. beenden ... eher nicht

    schau dir exec() und Konsorten an

    bzw bau das python script gleich als cronjob auf , dann brauchst du es nicht mal anzuschieben

    bedenke aber deine prognostizierte Laufzeit ... du brauchst einen Aufruf, der danach sofort wieder zum php-Script zurückkehrt - du willst ja schließlich nicht 1 Stunde lang im Browser auf die Sanduhr gucken (mal abgesehen davon, das php / Webserver nach einiger Zeit von allein dichtmachen)

    Kommentar


    • #3
      Mhh...
      Gibt es sonst vielleicht eine andere Möglichkeit ein Script/Programm zu schreiben, was aufm Webserver läuft und dort Aufgaben mit der Datenbank erledigt. Dabei sollte multithreading verfügbar sein.
      An schönsten wäre es dann noch, wenn man es mit PHP starten und wieder beenden kann, aber vielleicht ist das auch zu viel des guten...

      Kommentar


      • #4
        ich weiß gar nicht, was du immer mit multithreading meinst ....?

        der Webserver startet einen eigenen Prozess für jede Useranfrage. Wenn da ein Mehrkernprozessor oder sowas arbeitet, dann wird das selbstverständlich benutzt. Wenn dieser Prozess feststellt, das PHP nötig ist, wird eben PHP gestartet.... Dabei reicht doch ein Thread pro User durchaus hin ....

        warum denn dieses Fingerbrechen mit ner Anwendung, die dann auch noch Ewigkeiten rennt - und wieder beendet werden soll ? nach 1 Stunde WEISS PHP DOCH GAR NICHT MEHR , dass es in einer vorhergehenden Sitzung irgendwann mal ein Programm gestartet hat ... das liegt in der Natur der Arbeitsweise begründet .

        Leg doch bitte mal dar, was du EIGENTLICH BEZWECKST - und warum du denkst, du brauchst dafür eine externe Anwendung, die von PHP gestartet wird, ne Stunde rennt und dann wieder von PHP beendet wird?

        Kommentar


        • #5
          PHP Thread-Controlling: http://www.php.net/manual/de/intro.pcntl.php

          Du willst warscheinlich mehrere jobs nebeneinander ausführen, das nennt man Multi-Tasking, nicht Multi-Threading.

          Kommentar


          • #6
            Ich habe eben gerade noch ein bisschen weiter geforscht und bin schon etwas weiter gekommen.
            Gewollt ist ein kleines Programm, was einem kleinen Crawler ähnelt.
            Mit dem multithreading meinte ich nur, dass ein download einer anderen Datei schon beginnt und nebenbei der Parser durchläuft. Ist ist, soweit ich weiß, mit Threads möglich und PHP hat diese Funktion leider nicht. Zudem hat ein PHP Skript auch einen TimeOut.
            Ich habe mir halt nur gedacht, dass ich dieses "Programm", welches auf meinem Webserver liegen soll mit PHP starte und wenn gewollt auch wieder beenden kann. Dieses Programm sollte natürlich so gestartet werden, dass PHP nicht auf eine Antwort warten muss und es sozusagen im Hintergrund läuft.
            Mit Python ist es wohl am einfachsten möglich, oder gibt es da noch andere Sprachen, die geeignet sind?

            Kommentar


            • #7
              Wenn ich dich richtig verstanden habe, möchtest du asynchrone Events bedienen. Alternativ könntest du dafür auch nodejs oder vala verwenden.

              Kommentar


              • #8
                Zitat von IcePHP Beitrag anzeigen
                Gewollt ist ein kleines Programm, was einem kleinen Crawler ähnelt.
                Nenn wir es baby.google.php.
                Zitat von IcePHP Beitrag anzeigen
                Mit dem multithreading meinte ich nur, dass ein download einer anderen Datei schon beginnt und nebenbei der Parser durchläuft. Ist ist, soweit ich weiß, mit Threads möglich und PHP hat diese Funktion leider nicht. Zudem hat ein PHP Skript auch einen TimeOut.
                Tasks, nicht Threads.
                Zitat von IcePHP Beitrag anzeigen
                Ich habe mir halt nur gedacht, dass ich dieses "Programm", welches auf meinem Webserver liegen soll mit PHP starte und wenn gewollt auch wieder beenden kann. Dieses Programm sollte natürlich so gestartet werden, dass PHP nicht auf eine Antwort warten muss und es sozusagen im Hintergrund läuft.
                Baue einen Deamon der Worker spawnt ( ja, genau wie der Apache ), dessen Logik zwar die Prozesse überwacht und kennt aber nicht auf dessen Ende wartet.
                Zitat von IcePHP Beitrag anzeigen
                Mit Python ist es wohl am einfachsten möglich, oder gibt es da noch andere Sprachen, die geeignet sind?
                PHP.

                deamon -> infinitiver Loop der Prozesse untersucht und auf nen socket horcht, entsprechend auf kommando spawnt und zerstört oder statusse ausliefert.

                worker -> der nach dem spawn per socks auf den deamon verbindet und so mitgeteilt bekommt wann er nicht mehr idlen soll und was er zu tun hat.

                Ich seh da nu immer noch nix was auch nur annähernd Multi-Threading bräuchte..

                Kommentar


                • #9
                  Also wenn ich das richtig verstanden habe, dann funktioniert das wohl auch mit PHP. Jedoch verstehe ich gerade noch nicht so ganz, wie ich das mit PHP lösen kann. Das Script wird doch dann ewig laufen und irgendwann durch einen TimeOut getrennt.

                  Ich hatte gelesen, dass es schneller laufen würde, wenn man mehrere Prozesse gleichzeitig laufen lässt. Also z.b. Downloader und Parser.

                  Kommentar


                  • #10
                    PHP-CLI Scripts unterliegen nicht irgendwelchen Timeout's vom Apache oder denen von PHP. Alloziierbarer Speicher voll, Script beendet mit Fehler. Lässt sich aber mit Maintenance-Restarts des Deamon-Scripts recht simpel beheben.

                    http://kevin.vanzonneveld.net/techbl...aemons_in_php/

                    Je nach dem was du machen willst, musst du nicht unbedingt einen reellen Deamon basteln. Insofern du mal grob umreißen würdest was du genau da redudant ausführen willst und was das genau macht, könnte man dir die ein oder andere Empfehlung aussprechen.

                    Kommentar


                    • #11
                      Das ist genau das, was ich gesucht habe.
                      Werde mich dann jetzt wohl nochmal genauer mit CLI beschäftigen.

                      Vielen Dank!

                      Kommentar


                      • #12
                        Zitat von IcePHP Beitrag anzeigen
                        Das ist genau das, was ich gesucht habe.
                        Werde mich dann jetzt wohl nochmal genauer mit CLI beschäftigen.

                        Vielen Dank!
                        Gerne, bei gezielteren Fragen könnte man durchaus helfen. Ich hab schon einige Deamons geschrieben.

                        Kommentar


                        • #13
                          Das werde ich mir merken, und gegebenenfalls darauf zurückkommen.

                          Eine kleine Anmerkung am Rande:
                          Das Forum ist echt Top Tolle Themen und tolle Leute. Daumen hoch!

                          Kommentar


                          • #14
                            starten JA .. beenden ... eher nicht
                            Naja, man könnte per exec doch den Prozess killen?!

                            Kommentar


                            • #15
                              Du könntest in Dein "Programm" einen Server integrieren, über den es sich von außen steuern lässt.

                              Kommentar

                              Lädt...
                              X