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 :

Optimisation scripts à longue durée d'éxécution


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 9
    Par défaut Optimisation scripts à longue durée d'éxécution
    Bonjour,

    Plusieurs questions m'amènent à demander vos avis ici:

    Imaginons que j'ai stocké ds une BD plusieurs milliers d'adresse d'image que je dois télécharger, redimensionner, modifier, puis finalement sauvegarder et uploader via des APIs.

    J'imagine que le temps d'éxécution depassera facilement les 30 voir 60 secondes de bases de "max_execution_time" .

    1) Concernant l'optimisation et la manière de faire, avez-vous un avis sur la question (sans multi-threads pour cause php) ?

    2) Même en supposant que vous m'ayez donné la meilleure réponse, je pense que le le temps d'exécution dépassera 60s... Cela peut ne pas être un problème si je modifie cette valeur ds php.ini, quoique la documentation indique :
    "Votre serveur web peut avoir d'autres configurations de la durée limite d'exécution qui peuvent également interrompre PHP. Apache a une directive Timeout et IIS a une fonction CGI pour cela. Par défaut, elles valent toutes les deux 300 secondes. Reportez-vous à la documentation de votre serveur web pour plus de détails. "
    Personnellement, j'ai testé en local sur WAMP en modifiant uniquement PHP.ini et certains script durant 20min fonctionnent parfaitement.

    Sachant que c'est pour une application en ligne, est-il possible de modifier ces paramètres sur certaines offres de "semi-dédié" ? Si oui, pouvez vous m'indiquer quels hébergeurs le proposent ? ( OVH, hosteur.com, ...)

    3) Admettons que cette action (télécharger et traiter les images) soit déclenchée par l'utilisateur, je le vois mal patienter pendant le temps de traitement. Comment faire pour laisser l'utilisateur naviguer sur le site pendant que le script continue à tourner ?
    Est-ce que l'utilisation de sleep() et de "daemons" (je ne sais pas encore ce que c'est) est une bonne piste ?
    Ou utiliser de l'ajax pour le coté asynchrone ? (permet d'appeler le script sans que la navigation soit bloquée)


    Merci d'avance pour vos réponses que j'espère précises et exhaustives

  2. #2
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    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
    Par défaut
    Hello

    A moins que tu ne veuilles faire toutes les images d'un coup ou que tes images soient en très haute résolution, on devrait rester dans des limites acceptables (de l'ordre de 30s grand max) pour la manipulation d'une image. Ce que tu cherches à faire c'est un bulk de traitement lancé par l'utilisateur c'est bien ça ?

    Il y a en effet plusieurs façons de procéder:
    - soit on place un script en crontab qui se lance à intervale régulier et qui produit un nombre fini d'image (un lot de 10 par exemple) et place les compteurs qui vont bien en BDD ou sur fichier. Cette solution suppose un contrôle complêt du serveur et donc les solutions d'hébergement mutualisés ne peuvent convenir.
    - soit on laisse l'utilisateur lancer un bulk avec Ajax de telle sorte qu'on lance 10 requêtes assynchrones qui se renouvellent dès qu'elles ont fini leur traitement (une requête permet de manipuler une et une seule image).

    Avec la deuxième solution, on fera virtuellement de la parallélisation. Apache lancera 10 thread (1 pour chaque requête assynchrone). ça peut se faire assez simplement je pense et en plus l'utilisateur peut continuer à utiliser le site tant qu'il ne change pas de page bien entendu (ou alors il faut que la nouvelle page reprenne le bulk en cours ce qui amnène pas mal de problèmes).

    Le souci se situe selon moi plus au niveau de la charge, la manipulation d'images en PHP étant par nature très lourde, il se peut que tu aies des soucis avec ton hébergeur si tu mets l'UC à 100 pendant 24h par exemple

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 9
    Par défaut
    Merci pour ta réponse.
    Je suis en train de me renseigner sur les "daemons", je vais pousser un peu plus de ce côté, mais il semble que ca pourrait correspondre à ce que je cherche.
    Un exemple ici.

    Petit problème, il semblerait que l'on doive avoir un serveur dédié pour ca.

    Toute autre suggestion sera la bienvenue

  4. #4
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    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
    Par défaut
    Petit problème, il semblerait que l'on doive avoir un serveur dédié pour ca.
    Oui tout à fait. Un daemon est l'équivalent d'un service sous windows. Tu as dû remarquer que beaucoup de process portent le nom pnamed (comme httpd pour http daemon), ce sont tous des daemons.

    Ton article à l'air assez intéressant, je vais y jeter un oeil.

    -- Edit

    Dans ton cas je ne suis pas sûr qu'un Daemon soit d'une quelconque utilité. Comment comptais-tu t'en servir ? En fait quels sont les besoins de ton application au fil du temps ?

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 9
    Par défaut
    L'intérêt serait justement de pouvoir effectuer de long traitement sans bloquer l'utilisateur.
    Dans l'exemple donné, il effectue un traitement lorsqu'il y a une nouvelle valeur dans la BD.

    Ca pourrait être le cas pour moi, imaginons qu'un vendeur ( prestashop, rue du commerce, eBay, amazon, ...) veuille changer toutes ses images de produits pour y ajouter un watermark, comment résoudre cette problèmatique ?
    Il faut bien qu'il accède à un backoffice, determine quelle image sert de watermark, et que je procède à la création et au remplacement sur le dit site.

    Le vendeur ne va pas attendre un heure sur mon site que le script se termine, donc c'est là que je pensais faire intervenir le daemon.
    L'utilisateur demande la maj, et j'estime le tps nécessaire en fonction du nombre d'annonces, pour qu'il fasse autre chose pendant ce temps.

    Reste à voir comment faire communiquer le daemon avec mon application (le principe de consulter régulièrement la la BD pourrait marcher).


    EDIT--------------------------------------------------------------------

    En comment de mon lien on peut trouver open-source Daemon platform j'y jetterai un coup d'oeil ce soir. J'espère juste ne pas m'engager dans la mauvaise direction

  6. #6
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    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
    Par défaut
    le principe de consulter régulièrement la la BD pourrait marcher
    Le pooling est très largement déconseillé dans ce cas. Il vaut mieux envoyer un signal à ton daemon pour lui dire de démarrer ou s'arrêter. Regarde les signaux posix pour mieux comprendre.

Discussions similaires

  1. Pages ASP qui se figent à cause d'un script de longue durée ?
    Par Franck.H dans le forum Visual Studio
    Réponses: 2
    Dernier message: 20/08/2014, 15h59
  2. [PHP 5.3] Script longue durée et gestion en file d'attente
    Par sbadecoder dans le forum Langage
    Réponses: 7
    Dernier message: 25/02/2014, 20h28
  3. Réponses: 2
    Dernier message: 20/02/2008, 11h16
  4. Optimisation script pour réordonner des N° de Lots
    Par polemoss dans le forum MySQL
    Réponses: 1
    Dernier message: 06/06/2007, 18h37
  5. Gettickcount longue durée
    Par BECHE dans le forum Langage
    Réponses: 3
    Dernier message: 06/12/2005, 23h01

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