je reçois l'erreur suivante lors de l'utilisation multitraitement:erreur étrange dépicklage lors de l'utilisation multitraitement
Exception in thread Thread-2:
Traceback (most recent call last):
File "/usr/lib/python2.6/threading.py", line 525, in __bootstrap_inner
self.run()
File "/usr/lib/python2.6/threading.py", line 477, in run
self.__target(*self.__args, **self.__kwargs)
File "/usr/lib/python2.6/multiprocessing/pool.py", line 282, in _handle_results
task = get()
UnpicklingError: NEWOBJ class argument has NULL tp_new
Je ne sais absolument pas ce que cela signifie, bien que cela ressemble à quelque chose qui ne va pas au niveau C. Quelqu'un peut-il nous éclairer là-dessus?
MISE À JOUR: Ok, donc j'ai trouvé comment résoudre ce problème. Mais je suis encore un peu perplexe. Je renvoie une instance de cette classe:
class SpecData(object):
def __init__(self, **kwargs):
self.__dict__.update(**kwargs)
def to_dict(self):
return self.__dict__
Si je renvoie une instance de cet objet, j'obtiens l'erreur. Cependant, si je l'appelle to_dict
et retourne un dictionnaire, cela fonctionne. Qu'est-ce que je fais mal?
Je n'utilise pas vraiment de threads. Le module multi-traitement fonctionne en démarrant des processus séparés. Ensuite, les processus communiquent en sérialisant les objets et en les passant dans une file d'attente. Je reçois une erreur lorsque cet objet est désérialisé. –
@Kieveli, en ce qui concerne Python étant "complètement thread-safe", le point est que l'accès aux primitives et autres opérations internes qui sont effectuées par la machine virtuelle sont sûrs. Des choses comme des dictionnaires ne peuvent pas entrer dans des états non valides, planter la machine, etc., à cause d'un accès multithread. C'est assez différent de dire que votre application est immunisée contre les problèmes de synchronisation de threads. Les conditions de course et les impasses sont toujours possibles dans les applications mal conçues et doivent être traitées de la manière habituelle. Certaines installations (par exemple le module File d'attente) aident beaucoup, même au niveau de l'application. –