2009-12-08 6 views
1

Question pour Python 2.6rendu en boucle infinie

Je voudrais créer une application web simple, qui intervalle de temps spécifié exécutera un script qui modifie les données (dans la base de données). Mon problème est le code pour infinity loop ou une autre méthode pour atteindre cet objectif. Le script ne doit être exécuté qu'une seule fois par l'utilisateur. Les prochaines itérations doivent s'exécuter automatiquement, même lorsque l'utilisateur quitte l'application. Si quelqu'un a une idée de méthode pour détecter les interruptions d'applications, il serait bon de le montrer aussi. Je pense que les discussions peuvent être le meilleur moyen de réaliser cela. Malheureusement, je viens de commencer mon aventure avec Python et je ne sais pas encore comment les utiliser.

L'application aura également des vues montrant la base de données et pour le contrôle de script de boucle.

Des idées?

+0

Quelle infrastructure Web utilisez-vous? Django? –

+0

Maintenant sur le moteur google apps – Konrad

+0

Vous ne pouvez pas exécuter une boucle infinie sur GAE, la demande serait expirée, il était donc important de mentionner. La réponse de Kevin est la meilleure façon de le faire sur GAE –

Répondre

4

Vous avez mentionné que vous utilisez Google App Engine. Vous pouvez planifier des tâches récurrentes en plaçant un fichier cron.yaml dans votre dossier d'application. Les détails sont here. Il semble que vous ne recherchiez pas de solutions spécifiques à GAE, donc le conseil plus général que je donnerais est d'utiliser les capacités de planification native de n'importe quelle plate-forme que vous utilisez. Cron jobs sur un hôte * nix, tâches planifiées sur Windows, cron.yaml sur GAE, etc.

Dans vos autres commentaires, vous avez suggéré de vouloir quelque chose en Python qui ne laisse pas votre script en cours d'exécution, et je ne pense pas il y a un moyen de le faire. Certains processus doivent être responsables du lancement de tout ce dont vous avez besoin, donc soit vous le faites en Python et maintenez un processus en cours d'exécution (même si c'est juste sleep ing), ou vous utilisez les outils de planification de la plateforme. Le système d'exploitation est presque garanti de faire un meilleur travail que votre code.

+0

Je pensais qu'il devrait y avoir une réponse dans ce sens ... Je pense que nous avons un gagnant! – Skilldrick

+0

Désolé, pas encore :) – Konrad

1

Je pense que vous voudriez utiliser cron. écrivez votre script et exécutez le cron toutes les X minutes/heures.

si vous voulez vraiment faire en Python, vous pouvez faire quelque chose comme ceci:

while(True): 
    <your app logic here> 
    sleep(TIME_INTERVAL) 
+0

Travail incorrect dans mon cas. La méthode du sommeil augmente le temps d'exécution du script *. Y a-t-il du * maïs * écrit en python? – Konrad

+0

Pourquoi avez-vous besoin que cron soit écrit en python? – andylei

+0

Je n'ai pas besoin de cron (en Python) mais d'une solution simple avec des fonctionnalités comme cron. Je voudrais que toutes les applications soient contrôlées par du code Python et ne se soucient pas si cron est installé sur le serveur ou non. Mais il semble que cron est la meilleure solution ... – Konrad

0

Peut-on utiliser Cron pour planifier le travail à exécuter à certains intervalles? Il est généralement considéré comme meilleur que les boucles infinies, et a été conçu pour aider à résoudre ce genre de problème.

0

Il existe une primitive cron dans la bibliothèque standard Python: import sched. Il y a aussi threading.Timer.

Mais comme d'autres le disent, vous devriez probablement utiliser le vrai cron.

+0

Pourriez-vous en dire plus? Comment les utiliser dans mon cas? Cette méthode * empêche-t-elle le délai de script *? – Konrad

+0

Non. Si vous êtes sur GAE, vous voulez certainement la réponse de Kevin. –