2011-08-30 1 views
2

Je dois traiter plus d'images avec une grande quantité, (10 mb/image)php - comment déterminer le temps d'exécution?

Comment puis-je déterminer le temps d'exécution pour traiter toutes les images dans la file d'attente?

  • Déterminez la base de temps à partir des données que nous avons.

  • Définissez la limite de temps.

  • Exécuter le processus.

Et de quoi dépend le temps d'exécution? (Serveur, la vitesse d'Internet, le type de données ...?)

@All: j'ai changé ma façon de faire de mon problème, envoyez 1reqeust/1Image,

donc avec 40 images, nous allons avoir 40 demande. pas besoin de se soucier du temps de excution: D

Merci

+2

Qu'est-ce que vous essayez exactement de faire (quel type de traitement, d'où proviennent les images ...) et pourquoi avez-vous besoin de déterminer la durée d'avance? –

+0

ex: j'ai créé le pouce pour les images. avec 30s: nous pouvons traiter 20images 5mb/image. Si j'ai traitement plus de 20 images, je veux savoir le temps de traiter. le traitement d'autre sera cassé :( – Chameron

+0

Voulez-vous calculer un temps moyen pour les images x – ComFreek

Répondre

1

Vous pouvez tester votre configuration avec le code

// first image 
$start = time(); 
// ... work on image ... 
$elapsed = time() - $start; 

if (ini_get('max_execution_time') > $elapsed * $imageCount) 
    trigger_warning("may be not able to finish in time", E_USER_WARNING); 

S'il vous plaît noter deux choses: la CLI version de PHP, le max_execution_time est hardcoded à 0/inifinity (selon this comment).En outre, vous pouvez réinitialiser le compteur en appelant à nouveau set_time_limit() comme ceci:

foreach ($imagelist as $image) { 
    // ... do image work .... 

    // reset timer to 30 
    set_time_limit(30); 
} 

De cette façon, vous pouvez laisser courir votre script pour toujours ou au moins jusqu'à ce que vous avez terminé votre traitement d'image. Vous devez activer les règles d'écrasement appropriées dans la configuration apache pour autoriser cela via AllowOverride All

+1

j'ai changé mon chemin pour faire mon problème, envoyer 1reqeust/1image, donc avec 40 images, nous aurons 40 demande. pas besoin de se préoccuper du temps d'exécution: D – Chameron

+0

C'est aussi un moyen de résoudre le problème. =) – Lars

0

Je suggère (étant donné vos informations limitées dans la question) que vous essayez d'utiliser la méthode d'essai et erreur - exécuter votre processus et voir combien de temps il faut - augmentez la limite de temps jusqu'à ce qu'elle se termine - vous pourriez être en mesure de raccourcir votre processus.

+0

Quel est le meilleur moyen de suivre et d'augmenter la limite de temps? – Chameron

+0

Notez l'heure sur 'start - $ start = time();' puis à la fin montrez l'heure - echo time() - $ start'. La limite de temps d'exécution est un paramètre php.ini – ManseUK

+0

comment faire cela lorsque le script se casse. nous avons besoin de calculer la durée avant d'exécuter le script – Chameron

0

Soyez conscient que le temps de traitement du serveur peut varier beaucoup en fonction de la charge en cours sur le serveur d'autres processess. Si c'est un serveur partagé, un autre utilisateur peut exécuter un script à ce moment précis, ce qui fait que votre script n'effectue que la moitié.

Je pense que ça va être difficile de déterminer le temps d'exécution avant que le script est exécuté.

Je téléchargerais des lots (petits groupes) d'images. Le nombre d'images dépend de certains tests.

Par exemple, exécutez votre script plusieurs fois simultanément de différentes pages pour voir si tous encore complet sans casser. Si cela fonctionne avec 5 images dans la file d'attente, écrivez votre script pour traiter 5 images. Après le traitement des cinq premières images, stockez-les (écrivez dans la base de données ou tout ce dont vous avez besoin), attendez un peu puis prenez les 5 images suivantes.

Si cela fonctionne lorsque vous exécutez trois scripts avec 5 images chacune en même temps, vous devriez être en sécurité de le faire une fois avec ce que un autre utilisateur sur le serveur est en train de faire.

Vous modifiez la limite de temps d'exécution dans le fichier php.ini, ou si vous n'avez pas accès au fichier, vous pouvez le définir à la volée avec set_time_limit(600) pendant 600 secondes. Je voudrais cependant écrire un code plus intelligent au lieu de compter sur la limite de temps.

Mes cinq cents. Bonne chance!

+0

oui, j'ai essayé de diviser les images en quelques demandes, pas à une grande demande. Mais nous avons un problème, le montant de l'image n'est pas toujours le même. demande 1: 10 images/5mb/image; request 2: 10images/10mb/image – Chameron

+0

Ensuite, mettez en pause le script après un nombre d'octets transmis au lieu d'après un nombre spécifique d'images. Par exemple, après le traitement de 25 Mo, stockez et mettez en pause jusqu'à ce que l'image suivante soit dans la file d'attente. – Mattis