2010-09-01 7 views
5

J'ai quelques scripts qui doivent fonctionner simultanément en tant que processus séparés. Mon plan est d'avoir un travail cron qui exécute plusieurs instances de ces scripts à un intervalle donné. Est-ce une bonne idée? Quels sont les avantages et les inconvénients de cette approche? Y a-t-il d'autres options à prendre en compte? Bottomline: J'essaie d'imiter le multithreading. Toutes les conditions de course seront traitées via le code (par exemple, définir les statuts dans la base de données, etc.). Les scripts sont supposés effectuer des tâches intensives de traitement (création de vignettes, etc.).PHP Concurrency via Cron

Répondre

5

Vous pouvez utiliser le forking. Le script de démarrage charge toutes les configurations et initialisations par défaut, puis les processus fils de fork pour effectuer le traitement. Il pourrait ensuite surveiller les processus pour voir s'ils sont toujours en cours d'exécution. http://php.net/manual/en/function.pcntl-fork.php

0

Est-ce que PHP n'a pas fork()? Bien que ce ne soit pas vraiment multithread, c'est une manière basique de co-routines.

2

Eh bien, si vous en avez besoin comme un cronjob, allez-y. Si vous souhaitez plusieurs processus, vous souhaitez probablement utiliser pcntl_fork pour créer plusieurs instances du même script.

1

Selon la rapidité avec laquelle vous souhaitez réagir à ces tâches et si vous souhaitez effectuer des tâches exigeantes en matière de processeur, vous pouvez également étendre ce traitement à l'aide d'un système de mise en file d'attente. Découvrez Gearman ou beanstalkd avec plusieurs travailleurs par machine si vous avez plusieurs cœurs/processeurs.

0

Une des utilisations de cron est qu'il exécute une copie de votre script à l'intervalle que vous avez défini, quel que soit le nombre de processus de script en cours d'exécution. Cela signifie que les scripts ont besoin d'un moyen de communiquer les uns avec les autres afin qu'un maximum de N scripts soient exécutés simultanément (les scripts en trop peuvent simplement quitter immédiatement).

Une alternative à cron pourrait être supervisord qui exécutera un nombre configurable de scripts et surveillera chacun afin que toutes les sorties soient réapparues.