IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Gérer le temps d'exécution


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Inscrit en
    Novembre 2007
    Messages
    176
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 176
    Points : 94
    Points
    94
    Par défaut Gérer le temps d'exécution
    Salut,

    Je vous présente ma problématique: J'ai un script qui doit traiter 2 millions d'enregistrements. Je veux séparer les traitements de manière à traiter des blocs de 50000. J'excède la limite de mémoire après deux blocs. Je vous liste les solutions possibles que je veux éviter:

    1. exécuter manuellement un bloc à la fois
    2. recourir à un cron.
    3. Allouer plus de mémoire dans le php.ini.

    Avez d'autres suggestions?

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    montre ton script, tu dois avoir un problème de mémoire pour la mémoire augmente

  3. #3
    Membre régulier
    Inscrit en
    Novembre 2007
    Messages
    176
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 176
    Points : 94
    Points
    94
    Par défaut
    La mémoire nécessaire pour le script est élevée. Je le sais d'avance. C'est à cause que je dois traiter deux millions d'enregistrement provenant d'une table dans une BD. J'ai dejà fait des tests avec 50000 enregistrement. Cela marche parfaitement. Pour le moment je me contente de faire les traitements pour des blocs de 50000 enregistrement à la fois.

    Mais s'il n y a pas une autre solution à part celle que j'ai mentionné dans mon premier message, c'est compréhensible aussi. Au moins je peux être sure que je n'ai pas considéré une solution parce que j'en ignorait l'existence.

    Merci

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    montre ton code on pourra t'en déjà plus niveau des perf, si tu pense que ton code est optimisé, t'as pas le choix d’être en limite technique, mais sache que PHP (coté web) n'est pas dutout fait pour ça.

  5. #5
    Membre régulier
    Inscrit en
    Novembre 2007
    Messages
    176
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 176
    Points : 94
    Points
    94
    Par défaut
    Bonjour,

    En fait mon script est destiné à être exécuté en ligne de commande. J'ai pensé à la fonction "sleep", mais je n'ai trouvé nul part dans la documentation que la mémoire n'ai plus utilisée pendant la durée du "sleep". Idéalement, j'aimerai avoir un moyen d'exécuter un bloc, arrêter pendant une certaine durée pour libérer la mémoire, puis continuer avec la deuxième itération, arrêter, et ainsi de suite.

    Merci

  6. #6
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Heu... En PHP la libération mémoire c'est pas magique, tu peux mettre tous les slips que tu veux, ça va rien changer.

    Ce que tu peux faire en revanche c'est paralléliser les scripts en ouvrant plusieurs queues de traitements. Mais là encore, comme l'a rappellé Stealth, PHP c'est pas du tout fait pour ça et tu t'en sortira mieux avec un programme Python ou Java.

    Encore une fois, si tu veux qu'on réponde avec précision: montre ton code, j'ai oublié ma boule de cristal.

  7. #7
    Membre régulier
    Inscrit en
    Novembre 2007
    Messages
    176
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 176
    Points : 94
    Points
    94
    Par défaut
    Merci beaucoup

  8. #8
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    Citation Envoyé par Benjamin Delespierre Voir le message
    tu peux mettre tous les slips que tu veux, ça va rien changer.

  9. #9
    Membre régulier
    Inscrit en
    Novembre 2007
    Messages
    176
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 176
    Points : 94
    Points
    94
    Par défaut
    Je n'avais pas remarqué, mais c'est vraiment drôle :-)

    Pour revenir à l'optimisation du code en tant que tel. Mon script enregistre les données extraites de la BD (2 millions d'enregistrement) et les écrit sous format XML. J'ai utilisé DOM XML avec php 5.3
    Y a-t-il un autre moyen qui donnerait de meilleures performances?

  10. #10
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    De quelle façon utilises-tu les ressources ?

  11. #11
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    J'ais écris souvent sur le sujet, en php, si la fonction n'est pas
    bloquée par ton hébergeur (refusant les risques de saturation)
    tu procédes ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <?PHP
    ini_set ('max_execution_time', 0);
     
    //==============puis dans ta boucle (même énorme on s'en moque)
    //============== que se soit un FOR ou WHILE ou etc...
    for ($x=1;$x<1000000000000;$x++)
    {
    //========traitement
    set_time_limit(10); 
     
    }

  12. #12
    Membre régulier
    Inscrit en
    Novembre 2007
    Messages
    176
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 176
    Points : 94
    Points
    94
    Par défaut
    Merci beaucoup, Avec cette méthode je peux allouer de la mémoire dynamiquement, celà m'évite de modifier les configurations globales et même sur un navigateur ça marche. Quand vous dites que vous écrivez souvent là dessus, est ce que c'est sur le forum où sur un blogue? Si c'est un blogue j'aimerais avoir l'URL.

    Merci

  13. #13
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par helpcomm Voir le message
    Merci beaucoup, Avec cette méthode je peux allouer de la mémoire dynamiquement, celà m'évite de modifier les configurations globales et même sur un navigateur ça marche. Quand vous dites que vous écrivez souvent là dessus, est ce que c'est sur le forum où sur un blogue? Si c'est un blogue j'aimerais avoir l'URL.
    Merci
    j'avais réalisé un article sur mon pertit web ici
    http://www.fox-infographie.com/ajax_lance_php.php

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 17/10/2008, 15h25
  2. Gérer le temps d'exécution d'une requête.
    Par Soisy dans le forum Langage SQL
    Réponses: 2
    Dernier message: 25/09/2007, 09h06
  3. Réponses: 2
    Dernier message: 25/05/2004, 15h33
  4. Affichage du temps d'exécution d'une requête
    Par milka dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 22/03/2004, 17h48
  5. Temps d'exécution des instructions FPU
    Par ubi dans le forum Assembleur
    Réponses: 2
    Dernier message: 24/10/2003, 18h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo