Comprende el código bien antes de adaptarlo a tu proyecto si ttienes algo que aportar puedes dejarlo en la sección de comentarios.
Solución:
De hecho, puede ejecutar secuencias de comandos de python desde dentro de pm2:
pm2 start echo.py
Si la secuencia de comandos termina con el sufijo .py, utilizará un intérprete de python de forma predeterminada. Si su nombre de archivo no termina en .py, puede hacer lo siguiente:
pm2 start echo --interpreter=python
Descubrí que debe tener un poco de cuidado con el python que está usando, especialmente si está usando un python virtualenv con una versión diferente al python ‘predeterminado’ en su máquina.
PM2 es suficiente, ejecutará el intérprete por sufijo:
".sh": "bash",
".py": "python",
".rb": "ruby",
".coffee" : "coffee",
".php": "php",
".pl" : "perl",
".js" : "node"
PM2 con pipenv
Para aquellos que intentan ejecutar un programa python desde/con pipenv prueba un pm2.config.json (o ecosistema.json.config como en la documentación oficial de PM2) como esto:
Siendo las partes importantes "interpreter" : "pipenv"
y "interpreter_args": "run python3"
.
pm2.config.json
"apps": [
"name": "BackupService",
"script": "/home/service-backup/service/server.py",
"args": [""],
"wait_ready": true,
"autorestart": false,
"max_restarts": 5,
"interpreter" : "pipenv",
"interpreter_args": "run python3"
]
Después pm2 start pm2.config.json
. Yo siempre pm2 delete BackupService
(o como lo llames en “nombre”), antes de empezar de nuevo, porque aun con el --update-env
marca que no hace uso de una actualización pm2.config.json
. No sé por qué.
También tenga en cuenta que "interpreter_args"
parece haber sido cambiado a "node_args"
, según los últimos documentos de PM2. Estoy corriendo pm2 --version
3.0.0, y la forma antigua todavía funciona.
PM2 con multiprocesamiento Python
Si desea ejecutar un programa de python que usa lib de multiprocesamiento de Python, la solución es forzar su ejecución en tenedor modo. PM2, si no se le indica lo contrario, automáticamente intenta ejecutarlo en cluster
modo, parece.
Sin embargo, sospecho que debemos dejar la parte de multiprocesamiento a Python por completo. No puedo imaginar que PM2 pueda administrar los múltiples procesos generados por el multiprocesamiento de Python, que intenta, cuando se ejecuta en cluster
modo. Asimismo, al utilizar el "interpreter"
opción (por ejemplo, para pipenv), solo fork_mode
funcionará, de acuerdo con los documentos PM2.
entonces agrega "exec_mode": "fork"
para usted pm2.config.json
para hacerlo funcionar.
Si no usa un pm2.config.json
archivo, pasando -i 0
a pm2 start
debería forzar el modo de bifurcación también. (-i significa instancias)
Finalizando este artículo puedes encontrar las notas de otros gestores de proyectos, tú además tienes la habilidad dejar el tuyo si te apetece.