Lancement d'une tâche séparé

Char Snipeur Messages postés 10112 Statut Contributeur -  
georges97 Messages postés 20429 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,
J'ai une application graphique dont le but est de configurer puis de lancer une suite d'action qui dure longtemps. Mais j'aimerai que l'action se lance en concurence de la fenêtre. J'ai dans un premier temps penser au thread. ça fonctionne, mais si je ferme ma fenêtre, le thread s'arrête.
J'ai alors tenté le fork, mais j'ai plein d'erreurs du serveur X qui apparaissent.
Auriez vous une idée de comment je pourrai faire ? Merci.



3 réponses

nidhogg-59 Messages postés 107 Statut Membre 28
 
Bonjour!
Sous linux (gnome), tu peux lancer un processus qui ne dépendra pas du prog parent en faisant simplement:
gnome-terminal -e "/chemin/vers/programme/nom_du_programme.py"
Si ça peut aider...
0
Char Snipeur Messages postés 10112 Statut Contributeur 1 299
 
Merci, mais ce n'est pas ça mon problème.
Je suis au sein d'un programme Tkinter, et je fait :
   Threading.thread(target=fonction_longue,args=(arg1,aerg2)).start()

et lorsque je ferme ma fenêtre Tk, le thread se termine.
0
nidhogg-59 Messages postés 107 Statut Membre 28
 
Bonjour, désolé de ne pas avoir su répondre à ta question, mais après avoir testé un bout de code,
J'ai beau fermer la fenêtre, le thread fonctionne toujours:

#!/usr/bin/python
# -*- codding: utf-8 -*-
from Tkinter import Tk,Button
from threading import Thread

def th1():
a=0
while 1:
print a
a+=1

th=Thread(target=th1)

fe=Tk()
button=Button(fe,text="texte",command=th.start).pack()

fe.mainloop()
Tu pourrais peut-être montrer un bout de code plus grand, pour situer le problème...
0
Char Snipeur Messages postés 10112 Statut Contributeur 1 299
 
Merci de ton aide.
J'ai peut être une idée. Je déclare mon thread à l'intérieur de ma fonction Tk. Est-ce que le ramasse miette ne pourrait pas passer par là ?

Mais mon erreur est peut être d'avoir fermé ma connexion sans avoir fermer ma fenêtre. Du coup. Je ne sais pas trop ce que fait le programme lorsque le serveur X est éteint.

Note, pour lancer de manière indépendante au terminal, j'utilise disown.
0
nidhogg-59 Messages postés 107 Statut Membre 28
 
Bonjour!

Je ne pense pas que le ramasse-miette y soit pour quelque chose: j'ai fais quelques testes, et quoi que je fasse, le thread n'est jamais détruit.

En effet, si tu ferme serveur x alors qu'une fenêtre tu as peut-être une erreur de linux, qui arrête ton programme, et donc ton thread.

Et quand je parlais du terminal en parallèle, je voulais dire qu'à la place de faire une fonction dans ton programme, tu pouvais créer un second programme que tu lancerais en parallèle. Et dans ce cas, ton 2nd programme ne serait pas stoppé, même en cas de problème avec X.

Sinon, j'avoue que j'suis pommé! Pourquoi tu fermes serveur X?
Tu bosses sur un serveur personnel?
0
Char Snipeur Messages postés 10112 Statut Contributeur 1 299
 
non, au taf. J'ai un PC perso que j'éteins tout les soir (ou presque, windows oblige) je me connecte aux serveur de calcul via une session X. Je lance mes calculs pour la nuit ou le WE et je ferme tout (donc X).
Je ne comprends pas bien l'intérêt de lancer les deux programme en parallèle, je vais avoir des problèmes de communication entre les deux.
Bon, il faut que j'analyse le problème alors. Les petits tests que je fait fonctionnent bien. Mais dès que je passe "en production" ça fonctionne jusqu'à ce que je me déco.
0
nidhogg-59 Messages postés 107 Statut Membre 28
 
Ah, désolé, je n'avais pas compris que tu bossais à distance sur un serveur.
Je ne m'y connais pas du tout en travail à distance... Désolé de ne pas pouvoir t'aider.
0
georges97 Messages postés 20429 Date d'inscription   Statut Contributeur Dernière intervention   2 702
 
Bonjour,

Je ne sais pas si cela peut résoudre votre problème, mais je suis tombé par hasard sur ce tuto :

http://gnuniverse.free.fr/?p=277

Cordialement
0