[Funktion] sleep - und der server steht

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

  • [Funktion] sleep - und der server steht

    hallo zusammen,

    habe eine schleife mit der funktion sleep die auch funzt, wird jedoch diese schleife gestartet von einem user, so steht der server und wartet die zeit ab die die schleife benötigt.
    andere user können zur selben zeit nichts machen.
    arbeitet der server nicht neben bei die anderen anfragen ab solange er in der sleep funktion ist?

  • #2
    Sleep hält nur den eigenen Prozess an. Wenn das aber der einzige PHP- oder gar Webserverprozess ist, dann blockierts natürlich den ganzen Server.

    Beobachte deine Prozessliste jeweils vor und während das Script mit sleep() läuft. Was passiert?

    Kommentar


    • #3
      Also die Prozessorlast ist minimal und der Server scheint einfach nur zu warten bis die zeit in sleep abgelaufen ist.
      Nimmt aber sonst keine Anfragen in der zeit entgegen.

      Muß ich extra einen Prozess starten oder wie?
      Wen ein User eine komlexe Anfrage startet kann es doch nicht sein das alle anderen warten bis er damit fertig ist, das muß doch qusi "parallel" ablaufen.

      Kommentar


      • #4
        Wenn du shell hast -> ps -e
        Für alle die Fehler suchen, gibts gratis tolle Debuggingmöglichkeiten:
        var_dump(), print_r(), debug_backtrace und echo.
        Außerdem gibt es für unsere Neueinsteiger ein hervorragendes PHP Tutorial zu PHP 4 und PHP 5 (OOP)
        Es heißt $array['index'] und nicht $array[index]! Und nein, das ist nicht egal!
        Dieses Thema lesen, um Ärger im Forum und verzögerte Hilfen zu vermeiden.

        Kommentar


        • #5
          Normalerweise verzögert ein sleep() nur das betreffende Script.

          Also vermute ich die Ursache in irgendeinem Locking.
          Sessions arbeiten meist mit File-Lock, dh. 1 Sessiondatei
          darf auch nur von 1 Script geöffnet werden, alle andern
          die darauf zugreifen wollen, müssen warten

          oder ein DB-Table-Lock usw....
          Wir werden alle sterben

          Kommentar


          • #6
            Wieviele Webserverprozesse hast du laufen?
            Und welchen überhaupt, Apache? Prefork?

            Kommentar


            • #7
              Original geschrieben von combie
              Normalerweise verzögert ein sleep() nur das betreffende Script.

              Also vermute ich die Ursache in irgendeinem Locking.
              Sessions arbeiten meist mit File-Lock, dh. 1 Sessiondatei
              darf auch nur von 1 Script geöffnet werden, alle andern
              die darauf zugreifen wollen, müssen warten

              oder ein DB-Table-Lock usw....

              Bin Neuling. Kannst du mir das genauer erklären.
              Also alle meine Funktionen die ich geschrieben hab sind in einer Datei (ist das ein Problem?)
              Und wie sehe ich welche Webserverprozesse ich laufen hab?

              PHP-Code:

                  
              do
                  {
                      
              $zaehler ++;
                      
                      
              $abfrage "SELECT events.event_id, events.start, events.aktion
                                  FROM events
                                  ORDER BY events.start ASC"
              ;
                      
              $result mysql_query($abfrage);
                      
              $anzahl mysql_num_rows($result);
                      
                      if(
              $event_array["start"] <= date("Y-m-d H:i:s"))
                      {
                          
              $event_array mysql_fetch_assoc($result);
                          
                          if(
              $event_array["aktion"] == "gebädebau")
                          {
                              echo 
              "aktion<br>";
                          }
                          
                          
              $abfrage "DELETE FROM events
                                      WHERE event_id='
              $event_id'";
                          
              $loeschenOK mysql_query($abfrage);
                          
                      }
                      else
                      {
                          
              sleep(1);
                      }
                      
                  }while (
              $zaehler 30); 
              Zuletzt geändert von IVAN; 28.05.2006, 13:39.

              Kommentar


              • #8
                Waaaaaaaaaaaaaaaaaah!!! Also ohne was zum Problem jetzt beitragen zu können / wollen (hab mir deinen Code nur ganz kurz angeschaut), muss ich mal was loswerden:


                Datenbank-Abfragen in Schleifen sind böse!! Das ist so ziemlich das Schlimmste was du tun kannst! Die 1. Datenbankabfrage kannst du auch locker aus der Schleife rausziehen, denn bei jedem Schleifendurchlauf fragst du immer das Gleiche ab etc.... Damit sparst du dir schonmal gut und gerne 30 Queries.

                Das DELETE FROM kannst du auch unter der Schleife schreiben und die WHERE-Klausel Condition dynamisch erzeugen, d.h. du hast ne Variable die du stetig erweiterst... WHERE bla=x OR bla=y OR bla oder direkt mit WHERE bla IN (....)

                Die Funktion IN wird hier beschrieben: http://dev.mysql.com/doc/refman/4.1/...operators.html


                Wenn du dann die Query nach der Schleife ausführst und sie dynamisch machst, hast du nochmal - im besten Fall - 30 Queries gespart. Summa Summarum wären das 60 Queries - das ist teilweise doppelt oder dreifach soviel wie manche kompletten Websites mit allen Modulen benötigen...


                Sorry dass ich sonst nichts beitragen konnte, aber ich geh jetzt erstmal lecker essen
                Für alle die Fehler suchen, gibts gratis tolle Debuggingmöglichkeiten:
                var_dump(), print_r(), debug_backtrace und echo.
                Außerdem gibt es für unsere Neueinsteiger ein hervorragendes PHP Tutorial zu PHP 4 und PHP 5 (OOP)
                Es heißt $array['index'] und nicht $array[index]! Und nein, das ist nicht egal!
                Dieses Thema lesen, um Ärger im Forum und verzögerte Hilfen zu vermeiden.

                Kommentar


                • #9
                  Das soll halt ein Cronjob ersatz sein...

                  Der Inhalt der Tabelle kann sich schnell ändern und ich möchte es spätestens 1 sekunde danach wissen und darauf reagieren können
                  und den datensatz wen er dan abgearbeitet ist löschen damit ich ihn nicht nochein mall durchführe.

                  Kommentar


                  • #10
                    Deine gegenwärtigen Prozesse kannst du mit "top"beobachten - führe mal "man top" in einer Konsole aus ...
                    Original geschrieben von IVAN
                    Das soll halt ein Cronjob ersatz sein...
                    Der Inhalt der Tabelle kann sich schnell ändern und ich möchte es spätestens 1 sekunde danach wissen ...
                    Völlig egal, was es sein soll. Queries in Schleifen sind immer schlecht! Sie verzögern den Ablauf des Scripts.

                    Kommentar

                    Lädt...
                    X