Questions sur la durée des traitements

Petit nouveau ! | 8 Messages

05 mars 2019, 12:17

Bonjour

Je débute et souhaite quelques infos générales sur la durée de traitement des scripts.

Je souhaite réaliser un site qui affiche des données boursières en fin de journées pour la bourse de NewYork.

Prou cela j'envisage un Cron sur mon script tous les jours ouvrables en fin de journée.

Il y a environ 2000 actions et j ai prévu que mon script réalise les actions suivantes :

1- il récupère la liste des actions via curl
2- il effectue un traitement sur chacune de ces actions après un appel à curl pour obtenir les infos propres à cette action
3- il insère chacune de ces données dans une base mysql.

Je pourrais éviter le 1 en insérant les refs dans la base de données ok.
J'estime le temps de traitement par action à 2 secondes soit au total près d' 1h40 !!!


Ma question : est-ce que ma façon de procéder est judicieuse ? ou devrai-je carrément envisager de développer dans un autre langage ? Pour info j ai testé la récup d une page avec delphi (prés de 20000 lignes) et cela me prend prés de 20 seconds alors que php curl prend seulement 4 seconde !!!)

Quels conseils pourriez vous me donner pour optimiser mon temps de traitement ?

De ce que j ai lu je pourrais lancer plusieurs threads qui 'piocheraient' dans la bdd pour récupérer la prochaine action à traiter mais comment connaitre le nombre de threads optimum ? Il dépend de infrastructure serveur, le version de php ?

merci pour votre aide

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

05 mars 2019, 13:08

Il existe des librairies notamment en Python qui sont normalement + efficaces.
J'ai entendu parler de Ferret aussi en Go : https://github.com/MontFerret/ferret

Toutefois le meilleur outil/langage c'est celui qu'on sait le mieux utiliser donc PHP en ligne de commande ça va aussi marcher très bien.
Et 1h40 pour un cron ce n'est pas la mort non plus.
Quand tout le reste a échoué, lisez le mode d'emploi...

Petit nouveau ! | 8 Messages

05 mars 2019, 13:14

merci

je pensais qu'il y avait une limite avec set_time_limit .

J ai lu que l on pouvait malgré tout la contourner en appelant la fonction set_time_limit() qui remt à zero .

Est-ce utile dans mon cas ou un cron n est pas limité par le temps d exécution ?

Mammouth du PHP | 571 Messages

05 mars 2019, 14:16

merci

je pensais qu'il y avait une limite avec set_time_limit .

J ai lu que l on pouvait malgré tout la contourner en appelant la fonction set_time_limit() qui remt à zero .

Est-ce utile dans mon cas ou un cron n est pas limité par le temps d exécution ?
la tâche cron permet juste de lancer un script à une heure donnée, qu'importe le temps d'exécution du dudit script.
Maintenant pour permettre à ton script php(en tâche de fonds) de s'exécuter pendant une longue durée tu peux définir set_time_limit à 0. c'est le set_time_limit de php en mode cli qu'il faut modifier qui se trouve /etc/php/7.x/cli/php.ini).

A la place de curl, tu peux utiliser la lib guzzle(une surcouche de curl). Avec Guzzle tu peux lancer les requêtes asynchrones ce qui à l'avantage d'enchaîner plusieurs actions à la fois.

Perso moi je pencherai sur du nodejs qui sans doute a un temps d'exécution bcp plus rapide ou sur C# pour faire des traitements multi-therads

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

05 mars 2019, 15:24

Cron n'a pas de durée maximum d'exécution.
En revanche ton cron va exécuter PHP qui, lui, va effectivement avoir par défaut un max_execution_time pour chaque script.

Tu peux modifier ce temps d'exécution maximal avec la fonction set_time_limit(), voir même mettre 0 pour avoir un temps d'exécution illimitée mais je te déconseille de faire cela, il vaut mieux mettre un temps long (le double de ton temps d'exécution prévisionnel par exemple) plutôt que de désactiver complètement la limite.


Et +1 pour Guzzle
Quand tout le reste a échoué, lisez le mode d'emploi...

Petit nouveau ! | 8 Messages

05 mars 2019, 15:34

Merci

J ai un peu cherché et ai trouvé ça sur la façon d optimiser
https://blog.nicolashachet.com/technolo ... -code-php/

et je vais voir du côté de Guzzle

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

05 mars 2019, 18:17

J ai un peu cherché et ai trouvé ça sur la façon d optimiser
https://blog.nicolashachet.com/technolo ... -code-php/
Attention à bien regarder la date de publication des articles concernant PHP car le langage a beaucoup évolué ces 3 dernières années.

Et là c'est un article de 2012 avec certains conseils pour le moins douteux (qui étaient même douteux en 2012).
Quand tout le reste a échoué, lisez le mode d'emploi...

Petit nouveau ! | 8 Messages

05 mars 2019, 22:27

Merci
si tu as l url d une page plus actuelle, je suis preneur.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

06 mars 2019, 10:53

si tu as l url d une page plus actuelle, je suis preneur.
Vu que tu es débutant en PHP, ton principal objectif est déjà d'obtenir des scripts qui fonctionnent.
PHP notamment dans sa version 7 fait déjà beaucoup d'optimisations par défaut par rapport aux anciennes versions donc ne te préoccupe pas trop d'optimiser ton code pour l'instant, tu verras quand tu auras + d'expérience.
Quand tout le reste a échoué, lisez le mode d'emploi...

Petit nouveau ! | 8 Messages

07 mars 2019, 01:49

Merci pour ta réponse mais je pense qu il faut acquérir de bonnes pratiques dés le début.

De toutes les façons il est vrai que l apprentissage est suffisamment difficile / long mais je me dis que le temps que je passe à apprendre à coder propre et optimiser c est du temps que je n aurais pas à perdre à recorder pour optimiser.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

07 mars 2019, 02:10

"Coder propre" et optimiser sont 2 choses différentes.

Pour coder proprement, un (très) bon point de départ est de suivre les recommandations PSR, notamment PSR-1 et PSR-2 :
https://www.php-fig.org/psr/psr-1/
https://www.php-fig.org/psr/psr-2/
Quand tout le reste a échoué, lisez le mode d'emploi...

Petit nouveau ! | 8 Messages

07 mars 2019, 03:06

Merci

J'ai du boulot pour tout retenir....