[Python] Problèmes avec les thread
darkneurone
Messages postés
39
Statut
Membre
-
kilian Messages postés 8854 Statut Modérateur -
kilian Messages postés 8854 Statut Modérateur -
Bonjour à tous !
Bon voilà mon petit problème. Je fais un programme qui nécessite une quantité important de Thread... J'ai d'abord été confronté au problème de la limite à 1000 (et des poussières) threads. Pour le résoudre, j'ai 2 programmes :
- Program.py : Le premier qui a pour rôle d'effectuer des tâches en lançant 500 threads. (les tâches effectuées diffèrent en fonction des arguments reçu par le fichier (argv)).
- Launcher.py : Le deuxième n'est qu'un "lanceur de programme", qui aura pour but de lancer X*program.py... à l'aide d'une boucle et de passer des paramètres différents à celui-ci...
Maintenant je n'ai plus le problème de la limite des threads par programme... mais j'ai cette erreur à la place :
""""""""""""""""""""""""""""""""""""""""""
Unhandled exception in thread started by
Error in ss.excepthook:
Original exception was:
""""""""""""""""""""""""""""""""""""""""""
Voilà un exemple pour montrer comment je lance mes threads :
Launcher.py
Program.py
Bon cherchez pas trop à savoir ce que fais ce programme ! Pour simplifier l'exemple, j'ai mis n'importe quel calcul et des arguments bidons aux fonctions... Mais le principe reste le même.
J'ai effectué pas mal de recherche sur le net sur cette erreur... et personne n'a eu de répondre pour résoudre ce problème. C'est pourquoi je me tourne vers vous en espérant que vous ayez des idées pour m'aider !
---------------------------------------
PS : j'ai essayer d'utiliser les Lock()... mais je pense que je n'ai pas très bien compris le fonctionnement...
Voici ce que j'avais mis :
J'ai essayé de me basé sur l'exemple du wikiflibuste( http://wikipython.flibuste.net/moin.py/QuestionsGenerales?action=highlight&value=multithreading ).
mais je n'ai pas bien saisis apparemment !
Merci pour votre aide et pour m'avoir au moins lu !
Bonne journée à tous.
Bon voilà mon petit problème. Je fais un programme qui nécessite une quantité important de Thread... J'ai d'abord été confronté au problème de la limite à 1000 (et des poussières) threads. Pour le résoudre, j'ai 2 programmes :
- Program.py : Le premier qui a pour rôle d'effectuer des tâches en lançant 500 threads. (les tâches effectuées diffèrent en fonction des arguments reçu par le fichier (argv)).
- Launcher.py : Le deuxième n'est qu'un "lanceur de programme", qui aura pour but de lancer X*program.py... à l'aide d'une boucle et de passer des paramètres différents à celui-ci...
Maintenant je n'ai plus le problème de la limite des threads par programme... mais j'ai cette erreur à la place :
""""""""""""""""""""""""""""""""""""""""""
Unhandled exception in thread started by
Error in ss.excepthook:
Original exception was:
""""""""""""""""""""""""""""""""""""""""""
Voilà un exemple pour montrer comment je lance mes threads :
Launcher.py
def handler(i,rien):
os.system('Program.py '+str(i))
while i<50:
thread.start_new_thread(handler,(i,None))
i = i + 1
Program.py
def handler(a, b):
#Plusieurs actions utilisant les Sockets
for i in range(sys.argv[1],sys.argv[1]+250):
a = i*2
thread.start_new_thread(handler,(a, i))
Bon cherchez pas trop à savoir ce que fais ce programme ! Pour simplifier l'exemple, j'ai mis n'importe quel calcul et des arguments bidons aux fonctions... Mais le principe reste le même.
J'ai effectué pas mal de recherche sur le net sur cette erreur... et personne n'a eu de répondre pour résoudre ce problème. C'est pourquoi je me tourne vers vous en espérant que vous ayez des idées pour m'aider !
---------------------------------------
PS : j'ai essayer d'utiliser les Lock()... mais je pense que je n'ai pas très bien compris le fonctionnement...
Voici ce que j'avais mis :
def handler(i,rien):
os.system('Program.py '+str(i))
while i<65535:
thread.start_new_thread(handler,(i,None))
lock = threading.Thread(target=handler,args=(i,None))
lock.start()
lock = threading.Lock()
try :
lock.acquire()
finally :
lock.release()
i = i + 255
J'ai essayé de me basé sur l'exemple du wikiflibuste( http://wikipython.flibuste.net/moin.py/QuestionsGenerales?action=highlight&value=multithreading ).
mais je n'ai pas bien saisis apparemment !
Merci pour votre aide et pour m'avoir au moins lu !
Bonne journée à tous.
A voir également:
- Thread en python
- Citizen code python avis - Accueil - Outils
- \R python ✓ - Forum Python
- Ce programme est écrit en python il construit un mot secret ✓ - Forum Python
- Ce programme est écrit en python compléter le ✓ - Forum Python
- Python est introuvable. exúcutez sans argument pour procúder ó l ✓ - Forum Python
5 réponses
Ton programme ne vérifie pas que les threads sont morts avant de quitter ( avec join() ).
Résultat: Une fois le thread principal terminé, le garbage collector commencer à nettoyer les objets alors qu'il y a encore des threads vivants, d'où les exceptions.
Résultat: Une fois le thread principal terminé, le garbage collector commencer à nettoyer les objets alors qu'il y a encore des threads vivants, d'où les exceptions.
Bonjour,
J'ai exactement le même problème, mais avec un système embarqué.
Le programme suivant :
import thread
def plop(pid):
print str(pid)
for i in range(6):
thread.start_new(plop,(i,))
Me donne :
[root@armadeus test_soft]# python test.py
0
1
Unhandled exception in thread started by
Error in sys.excepthook:
Original exception was:
Unhandled exception in thread started by
Error in sys.excepthook:
Original exception was:
Unhandled exception in thread started by
Error in sys.excepthook:
Original exception was:
Unhandled exception in thread started by
Error in sys.excepthook:
Original exception was:
Si quelqu'un à une idée ?
J'ai exactement le même problème, mais avec un système embarqué.
Le programme suivant :
import thread
def plop(pid):
print str(pid)
for i in range(6):
thread.start_new(plop,(i,))
Me donne :
[root@armadeus test_soft]# python test.py
0
1
Unhandled exception in thread started by
Error in sys.excepthook:
Original exception was:
Unhandled exception in thread started by
Error in sys.excepthook:
Original exception was:
Unhandled exception in thread started by
Error in sys.excepthook:
Original exception was:
Unhandled exception in thread started by
Error in sys.excepthook:
Original exception was:
Si quelqu'un à une idée ?
Merci,
Maintenant ça fonctionne.
Du coup je suis obligé d'utiliser le module threading et de faire une classe qui en hérite :
Maintenant ça fonctionne.
Du coup je suis obligé d'utiliser le module threading et de faire une classe qui en hérite :
import threading
class MyThread(threading.Thread):
def __init__(self,myId):
self.myId = myId
threading.Thread.__init__(self)
def run(self):
print str(self.myId)
threads = []
for i in range(6):
thread = MyThread(i)
thread.start()
threads.append(thread)
for thread in threads:
thread.join()
print "end"
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question