0

Envisagez le programme de ligne de commande Python suivant. Il ne fonctionne pas parce qu'elle est incomplète, mais je pense qu'il illustre le problème:Comment un programme Python peut-il se fonder lui-même?

#!/usr/bin/python3 
import multiprocessing 

pool = multiprocessing.Pool() 
for task in expensive_iterator_with_user_interaction(): 
    pool.call_async(expensive_computation, (task,)) 
pool.close() 

print("Dear user, you may now press Ctrl-Z and bg this script.") 
pool.join() 

Ainsi, le problème est que ce script a besoin entrée utilisateur alors qu'il est le lancement des processus coûteux en parallèle. Mais il y a aussi le moment où l'interaction de l'utilisateur n'est plus nécessaire. Ensuite, je demande à l'utilisateur de mettre en contexte ce processus avec des actions de shell.

Cependant, est-ce que cela peut également être réalisé par le programme lui-même?

(Note: Le cœur du problème est l'enchevêtrement de l'entrée de l'utilisateur avec le tir des « calculs coûteux » Par conséquent, je ne peux pas séparer les deux dans deux scripts, et en laissant une fraie l'autre comme un démon..)

+0

cochez cette fonction https://docs.python.org/3/library/os.html#os.fork –

+0

Cela fonctionne-t-il également dans un script multiprocesseur? Qu'en est-il des fichiers ouverts et des canaux ouverts aux sous-processus? –

+0

Je ne sais pas si c'est le cas, mais devrait fonctionner à mon avis –

Répondre

0

La commande screen peut vous aider. Utilisez screen -L pour créer une nouvelle session et exécuter votre application. Après la saisie de certaines données, vous pouvez appuyer sur "Ctrl-A" puis appuyez sur "D" sur votre clavier pour détacher la session.

Maintenant, votre application s'exécute en arrière-plan.

Si vous souhaitez effectuer d'autres opérations ou entrer d'autres données, vous pouvez utiliser la commande screen -r pour rattacher la session précédente. Est comme un écran virtuel, vous pouvez donc passer votre programme en arrière-plan ou au premier plan en fonction de vos besoins.

+0

Oui mais ce n'est pas convivial. Après tout, Ctrl + Z + bg fonctionne aussi. Mais les deux ont besoin d'une action supplémentaire de l'utilisateur. Le programme doit être publié et devrait être aussi facile à utiliser que possible. –