j'invoque des scripts Python à l'aide exec (...) en php et python fonctionne sa part et de l'environnement non structuré, il n'y a pas django ou tout autre cadre.
Et un produit est client & la plupart des tâches sont des tâches de longue durée. Donc, s'il y a une demande du client, elle doit être immédiatement satisfaite. Ici, pour nous, le temps est également une préoccupation majeure que nous ne pouvons pas retarder le processus.
Donc, si j'obtiens trop de requêtes du client (Peut-être, les crons fonctionnent aussi en même temps), j'obtiendrai trop de processus python et selon ma connaissance chaque exec (...) appellera l'interpréteur . Donc, si de toute façon je peux empêcher d'appeler l'interprète à chaque appel, ce sera bon pour moi. L'espace mémoire de 1Kb ou 1Mb est très utile.
Problèmes
- utilisation de la mémoire est élevée (Si je peux sauver 1Mb, je veux essayer une solution. Le script supposant est bien écrit. Bon sommeil est donnée en boucle et garbage collector est bien géré.)
- Parfois, pour un script Python long, si ce script est appelé à partir de php, en utilisant exec (...) et le processus n'est pas appelé en arrière-plan, et ce script python est terminé, et il faut encore Tim e pour exécuter la ligne suivante après cet exec.
Solution
Pour la solution, je pensais que je devrais utiliser les appels API pour Python. Mais rappelez-vous que je ne peux pas utiliser de cadre. Pour utiliser le framework, j'ai besoin de réécrire le code, ce qui n'est pas possible dans mon cas. CGI et FCGI peuvent donc m'aider ici. Pour exécuter des scripts Python à partir d'appels API, j'ai besoin d'activer CGI pour s'exécuter.
Mais ce que je trouve intéressant est ::
Les programmes utilisant CGI, pour communiquer avec leur serveur web, doivent être commencé par le serveur pour chaque demande. Donc, chaque requête démarre un nouvel interpréteur Python - qui prend un certain temps à démarrer - rendant ainsi toute l'interface utilisable uniquement pour les situations de faible charge.
Si j'exécuter un script comme suit, que tout commencera à la fois
subprocess.Popen(["python", "program1.py"])
subprocess.Popen(["python", "program2.py"])
subprocess.Popen(["python", "program3.py"])
subprocess.Popen(["python", "program4.py"])
subprocess.Popen(["python", "program5.py"])
subprocess.Popen(["python", "program6.py"])
Supposons que tous les programmes sont ce travail de longue course.
1) Puis-je empêcher module python de créer plus interprète et si oui, comment puis-je?
2) Combien d'interprètes le maximum, un module python peut créer (à la fois comme le code ci-dessus)?
Si tel est votre script, il tournera jusqu'à 6 interprètes python ... – mgilson
Post est peu modifiée. Et si vous avez 100 scripts, cela va créer 100 interprètes. Alors, combien d'interprètes un module python peut-il gérer? Je suis confronté à ce scénario sur mon propre serveur. –