php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2008

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 16.12.2008, 13:30  
Erfahrener Benutzer
 
Registriert seit: 16.07.2005
Beiträge: 1.007
PHP-Kenntnisse:
Fortgeschritten
brian johnson befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von hoctar Beitrag anzeigen
Das hilft mir echt weiter -.-

Mein Script sieht in etwa so aus:
PHP-Code:
$pids = array();
$j 0;
$csv fopen('datei.csv''r');
while(
$data fgetcsv($csv32';'))
 {
  
$j++;
  
$pids[$j] = pcntl_fork();
  
  if(!
$pids[$j]) 
   {
     
$eintrag "INSERT INTO test (id, zeit) VALUES ('$data[0]', 'now()')";
     
mysql_query($eintrag);
   }

for(
$i 0$i $j$i++) {
  
pcntl_waitpid($pids[$i], $statusWUNTRACED);

aber leider funktioniert das so nicht, weil der child die verbindung schließt.

Ich habe mir schon überlegt für jeden Prozess eine neue DB verbindung aufzubauen. Würde das so gehen ? Habt ihr noch andere Möglichkeiten ?
schleife + fork? pass auf das dein pc nicht gleich das hier singt...

Zitat:
Wie könnte man die Prozesse die gleichzeitig laufen auf z.B. 10 begrenzen ? Gibts da zu irgend eine pcntl funktion ?
das macht in deinem fall wenig sinn. threads und forks sind dazu da, um dinge die wirklich gleichzeitig passieren sollen auch (begrenzt) gleichzeitig auszuführen. so z.b. ein server der mit mehreren clients gleichzeitig redet. in deinem fall jedoch wo du nur mit einer datei arbeiten musst, bleib bei einem prozess das ist hardwareschonender und definitiv nicht langsamer als mehrere prozesse (die sich auch noch abstimmen müssten, wer was liest und zudem auf mysql warten müssen und dieses wiederrum auf fsync [was du mit lock table oder transaktionen umgehen kannst])
__________________
PHP4?!?>>>Aktuelle PHP Version: 5.2.11 || 5.3.0
Suse 11.2 *vorfreude*

Geändert von brian johnson (16.12.2008 um 14:16 Uhr).
brian johnson ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 16.12.2008, 14:41  
Erfahrener Benutzer
 
Registriert seit: 29.09.2008
Beiträge: 155
hoctar befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
in deinem fall jedoch wo du nur mit einer datei arbeiten musst
Ich arbeite mit mehreren Dateien.

Ich habe das nun so versucht:
PHP-Code:
while($data fgetcsv($csv64';'))
 {

  while(
$prozess[$j] != 0)
   {
    
$currentprozess $j;
    
$j++;
    if(
$j == 9)
     {
      
$j 0;
     }
   }
   
   
$pid pcntl_fork();
   
$prozess[$j] = $pid;

  if(!
$pid// Child process start
   
{
    
//Anweisungen
   
$prozess[$currentprozess] = 0;
   }

Also in dem Array "Prozess" sind die PIDs gespeichert, wenn der Prozess zuende gelaufen ist setzt er seine PID im Array auf Null und die while überprüft immer ob gerade 10 Prozesse am laufen sind.
So habe ich es mir eigentlich gedacht, aber das geht leider nicht. Das Script führt die ersten 10 Prozesse aus und bleibt dann in der schleife hängen. Wahrscheinlich kann man im Prozess keine Variablen nach ausen hin verändern.
Hat da einer eine Idee wie ich die Varibale $prozess[$currentprozess] auf null setzte nach dem der prozess abgeschlossen ist ?
hoctar ist offline  
Alt 16.12.2008, 15:24  
Erfahrener Benutzer
 
Registriert seit: 16.07.2005
Beiträge: 1.007
PHP-Kenntnisse:
Fortgeschritten
brian johnson befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von hoctar Beitrag anzeigen
Ich arbeite mit mehreren Dateien.
der gepostete code sagt was anderes.
__________________
PHP4?!?>>>Aktuelle PHP Version: 5.2.11 || 5.3.0
Suse 11.2 *vorfreude*
brian johnson ist offline  
Alt 16.12.2008, 15:33  
Erfahrener Benutzer
 
Registriert seit: 29.09.2008
Beiträge: 155
hoctar befindet sich auf einem aufstrebenden Ast
Standard

Ich benutze im Kind Prozess mehrere Funktionen die aus einer Datei lesen.
Das hat aber nix mit meinem Problem zutun.
hoctar ist offline  
Alt 16.12.2008, 21:43  
Erfahrener Benutzer
 
Registriert seit: 16.07.2005
Beiträge: 1.007
PHP-Kenntnisse:
Fortgeschritten
brian johnson befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von hoctar Beitrag anzeigen
Das hat aber nix mit meinem Problem zutun.
nein, dein problem ist verständnis. erkläre bitte jede zeile deines hier geposteten codes, vielleicht kommen wir dann weiter.
__________________
PHP4?!?>>>Aktuelle PHP Version: 5.2.11 || 5.3.0
Suse 11.2 *vorfreude*
brian johnson ist offline  
Alt 16.12.2008, 22:27  
Erfahrener Benutzer
 
Benutzerbild von David
 
Registriert seit: 05.09.2007
Beiträge: 5.044
David wird schon bald berühmt werden
Standard

Zitat:
while($prozess[$j] != 0)
{
$currentprozess = $j;
$j++;
if($j == 9)
{
$j = 0;
}
}
Damit verbraucht PHP soviel Rechenleistung, wie es kriegen kann, nur um zu prüfen, ob irgendwo ein Slot frei ist -> Performance-Killer.
siehe pcntl_wait und pcntl_sigtimedwait
David ist offline  
Alt 16.12.2008, 22:37  
Erfahrener Benutzer
 
Benutzerbild von David
 
Registriert seit: 05.09.2007
Beiträge: 5.044
David wird schon bald berühmt werden
Standard

Zitat:
Zitat von hoctar
Wahrscheinlich kann man im Prozess keine Variablen nach ausen hin verändern.
Durch fork erzeugst Du einen neuen Prozess. Änderst Du eine Variable im einen Prozess, hat das keine Auswirkung auf eine Variable im anderen Prozess.
David ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
mysql query browser + umlaute gugu Datenbanken 10 28.03.2009 19:15
MySQL Query zum Ersetzen von sonderbaren Umlauten Carino Datenbanken 13 14.05.2007 18:08
MySQL Query anzahl JanM PHP Tipps 2006 3 12.07.2006 19:36
Mysql Query mitloggen cycap Datenbanken 1 03.04.2006 21:36
MySQL Query Browser c01001 Datenbanken 6 14.01.2006 22:13
Lost connection to MySQL server during query in ... ? Alpha Centauri Datenbanken 0 24.10.2005 11:09
verschiedene Query Ergebnisse in MySQL 4.0.x und 4.1.x Datenbanken 3 18.09.2005 15:57
Suche Tipps für Persormance-Steigerung (Geld für Nützliches) Beitragsarchiv 18 16.08.2005 10:57
Lost connection to MySQL server during query bicpi PHP-Fortgeschrittene 17 02.08.2005 11:42
mysql_query meldet Fehler, MySQL Query Browser nicht Datenbanken 3 04.05.2005 17:15
mysql query... alle datensäze älter als x tage löschen... Sclot Datenbanken 2 05.03.2005 23:04
[Erledigt] Datenbank im MySQL Query Browser PHP Tipps 2005 0 07.02.2005 13:54
mysql query fehler Datenbanken 6 19.01.2005 23:44
mysql update query mit mehreren Tabellen funktioniert nicht PHP-Fortgeschrittene 5 08.01.2005 16:29
mysql Fehler - query was empty Anuschka Datenbanken 2 01.09.2004 00:28

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php fork mysql connection, php fork gleichzeitig, pcntl_waitpid funtioniert nicht, php fork auf mehrere prozesse warten, php fork lost connection to mysql server during query, run mysql query from php fork, php fork mysql, pcntl_fork(); nicht bekannt, pcntl_fork mysql, php fork \lost connection to mysql server during query\, pcntl_fork vars, pcntl_fork shared variables, pcntl_fork variablen vom vater, php mysql warten bis eintrag geändert

Alle Zeitangaben in WEZ +2. Es ist jetzt 20:33 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum