“Ne peut pas démarrer un nouveau thread erreur” en Python
Je suis en cours d'exécution d'un script qui extrait les informations de paquets debian et l'enregistre dans une base de données.
Après l'extraction d'informations à partir d'environ 100 colis une erreur se produit. L'erreur est "ne peut pas démarrer un nouveau thread"
Pourquoi suis-je en face de cette erreur? Quelle peut être la solution possible?
C'est le code utilisé pour enregistrer les données :
for i in list_pack:
if not i in oblist:
#Creating Packages
slu=slugify(i)
ob=Gbobject()
ob.title=i
ob.slug=slu
ob.content=''
ob.tags=tagname
#with reversion.create_revision():
ob.save()
gb=Gbobject.objects.get(title=i)
gb.objecttypes.add(Objecttype.objects.get(title='Packages'))
gb.sites.add(Site.objects.get_current())
#with reversion.create_revision():
gb.save()
gd=Gbobject.objects.get(title=i)
print 'The Object created was',gd
#Decsription
try:
atv=package_description_dict[i]
atvalue=unicode(atv,'utf-8')
except UnicodeDecodeError:
pass
try:
lo=Gbobject.objects.get(title=i)
loid=NID.objects.get(id=lo.id)
except Gbobject.DoesNotExist:
pass
if atvalue<>'':
slu=slugify(atvalue)
at=Attribute()
at.title=atvalue
at.slug=slu
at.svalue=atvalue
at.subject=loid
att=Attributetype.objects.get(title='Description')
at.attributetype=att
#with reversion.create_revision():
at.save()
print 'yeloow13'
Comme Description
, il y a autour de !2 autres propriétés du paquet qui sont enregistrées de la même manière.
C'est le plein de sperme que je reçois lorsque l'erreur se produit :-
error Traceback (most recent call last)
/home/radhika/Desktop/dev_75/gnowsys-studio/demo/<ipython console> in <module>()
/usr/local/lib/python2.6/dist-packages/django_gstudio-0.3.dev-py2.6.egg/gstudio/Harvest/debdata.py in <module>()
1086 # create_attribute_type()
1087 # create_relation_type()
-> 1088 create_objects()
1089 #create_sec_objects()
1090 #create_relations()
/usr/local/lib/python2.6/dist-packages/django_gstudio-0.3.dev-py2.6.egg/gstudio/Harvest/debdata.py in create_objects()
403 ob.sites.add(Site.objects.get_current())
404 #with reversion.create_revision():
--> 405 ob.save()
406 #time.sleep(10)
407 #gd=Gbobject.objects.get(title=i)
/usr/local/lib/python2.6/dist-packages/django_reversion-1.6.0-py2.6.egg/reversion/revisions.pyc in do_revision_context(*args, **kwargs)
298 try:
299 try:
--> 300 return func(*args, **kwargs)
301 except:
302 exception = True
/usr/local/lib/python2.6/dist-packages/django_gstudio-0.3.dev-py2.6.egg/objectapp/models.pyc in save(self, *args, **kwargs)
658 @reversion.create_revision()
659 def save(self, *args, **kwargs):
--> 660 super(Gbobject, self).save(*args, **kwargs) # Call the "real" save() method.
661
662
/usr/local/lib/python2.6/dist-packages/django_reversion-1.6.0-py2.6.egg/reversion/revisions.pyc in do_revision_context(*args, **kwargs)
298 try:
299 try:
--> 300 return func(*args, **kwargs)
301 except:
302 exception = True
/usr/local/lib/python2.6/dist-packages/django_gstudio-0.3.dev-py2.6.egg/gstudio/models.pyc in save(self, *args, **kwargs)
327 @reversion.create_revision()
328 def save(self, *args, **kwargs):
--> 329 super(Node, self).save(*args, **kwargs) # Call the "real" save() method.
330
331
/usr/local/lib/python2.6/dist-packages/django/db/models/base.pyc in save(self, force_insert, force_update, using)
458 if force_insert and force_update:
459 raise ValueError("Cannot force both insert and updating in model saving.")
--> 460 self.save_base(using=using, force_insert=force_insert, force_update=force_update)
461
462 save.alters_data = True
/usr/local/lib/python2.6/dist-packages/django/db/models/base.pyc in save_base(self, raw, cls, origin, force_insert, force_update, using)
568 if origin and not meta.auto_created:
569 signals.post_save.send(sender=origin, instance=self,
--> 570 created=(not record_exists), raw=raw, using=using)
571
572
/usr/local/lib/python2.6/dist-packages/django/dispatch/dispatcher.pyc in send(self, sender, **named)
170
171 for receiver in self._live_receivers(_make_id(sender)):
--> 172 response = receiver(signal=self, sender=sender, **named)
173 responses.append((receiver, response))
174 return responses
/usr/local/lib/python2.6/dist-packages/django_gstudio-0.3.dev-py2.6.egg/objectapp/signals.pyc in wrapper(*args, **kwargs)
65 if inspect.getmodulename(fr[1]) == 'loaddata':
66 return
---> 67 signal_handler(*args, **kwargs)
68
69 return wrapper
/usr/local/lib/python2.6/dist-packages/django_gstudio-0.3.dev-py2.6.egg/objectapp/signals.pyc in ping_external_urls_handler(sender, **kwargs)
90 from objectapp.ping import ExternalUrlsPinger
91
---> 92 ExternalUrlsPinger(gbobject)
93
94
/usr/local/lib/python2.6/dist-packages/django_gstudio-0.3.dev-py2.6.egg/objectapp/ping.pyc in __init__(self, gbobject, timeout, start_now)
153 threading.Thread.__init__(self)
154 if start_now:
--> 155 self.start()
156
157 def run(self):
/usr/lib/python2.6/threading.pyc in start(self)
472 _active_limbo_lock.release()
473 try:
--> 474 _start_new_thread(self.__bootstrap, ())
475 except Exception:
476 with _active_limbo_lock:
error: can't start new thread
Je ne suis pas écrire du code pour gérer les threads.
Merci de poster le traceback que vous obtenez.
Exception in thread thread-697: Traceback (most recent call last): File "/usr/lib/python2.7/threading.py" de ligne, 552, dans __bootstrap_moi intérieur.run() File "/usr/local/lib/python2.7/dist-packages/django_gstudio-0.3.dev-py2.7.egg/objectapp/ping.py", à la ligne 113, en exécution de réponse = auto.ping_gbobject(gbobject) File "/usr/local/lib/python2.7/dist-packages/django_gstudio-0.3.dev-py2.7.egg/objectapp/ping.py", la ligne 121, dans ping_gbobject gbobject.get_absolute_url()) File "/usr/local/lib/python2.7/dist-packages/django/utils/functional.py", ligne 11, dans _curried
A qui la complète traçabilité en amont? J'ai copié à votre question, mais il semble incomplète?
Merci de nous montrer comment vous lancer les filets. Cette partie sur l'enregistrement de votre base de données de données n'est pas pertinent.
Exception in thread thread-697: Traceback (most recent call last): File "/usr/lib/python2.7/threading.py" de ligne, 552, dans __bootstrap_moi intérieur.run() File "/usr/local/lib/python2.7/dist-packages/django_gstudio-0.3.dev-py2.7.egg/objectapp/ping.py", à la ligne 113, en exécution de réponse = auto.ping_gbobject(gbobject) File "/usr/local/lib/python2.7/dist-packages/django_gstudio-0.3.dev-py2.7.egg/objectapp/ping.py", la ligne 121, dans ping_gbobject gbobject.get_absolute_url()) File "/usr/local/lib/python2.7/dist-packages/django/utils/functional.py", ligne 11, dans _curried
A qui la complète traçabilité en amont? J'ai copié à votre question, mais il semble incomplète?
Merci de nous montrer comment vous lancer les filets. Cette partie sur l'enregistrement de votre base de données de données n'est pas pertinent.
OriginalL'auteur Rads | 2012-05-14
Vous devez vous connecter pour publier un commentaire.
Désolé d'avoir une solution incomplète ici, je n'ai pas la cote à poster dans la section commentaire.
Une chose à vérifier est le nombre total de threads en cours d'exécution. J'ai un code qui vérifie le nombre de cœurs (sys), puis lance les threads et les contrôles de base de chargement pour tester la façon dont le système d'exploitation gère fil de distribution et j'ai appris que windows 7 (par exemple) semble jeter une erreur au-delà de 32 threads sur un 8 (logique) core CPU. [C'est sur Python 2.7, 32 bits au sein Win 7 64 bits, etc, YMMMV]. Sur d'autres machines que j'peuvent aller au-delà de 1 000 Threads.
Donc je suppose que la version courte est: combien de fils, avez-vous déjà aller quand vous obtenez une erreur? Vous pouvez vérifier avec
Au-delà de ce que vous n'avez pas vraiment donner le filetage de la partie du code ici, donc je voudrais vous diriger vers cet excellent Python page Centrale.
Vous pouvez également profiter de cette précédente Un débordement de pile discussion sur grand fil tâche compte et comment les aborder.
Encore une fois, mes excuses que c'est plus une direction à regarder qu'une solution, je pense que plus d'information est probablement nécessaire pour nous aider à comprendre ce que vous êtes en cours d'exécution.
OriginalL'auteur Ezekiel Kruglick
Vous utilisez un système 32 bits et la gestion de la mémoire virtuelle. L'un de vos bibliothèques est susceptible de frai fils et de ne pas récupérer correctement. Pour contourner ce problème, essayez de réduire la valeur par défaut la taille de la pile avec
filetage.stack_size
.OriginalL'auteur Matt Joiner