J'ai un module C++ personnalisé pour python qui expose des fonctions, dont certaines utilisent TBB (tbb21_015oss) pour accélérer le traitement.Appel de TBB 'parallel_for' dans un thread python
Jusqu'à présent, je n'avais aucun problème lors de l'appel d'une fonction TBB-accélérée à partir de Python (2.6.2) dans un environnement Win32.
Mais maintenant, j'ai un problème en appelant une telle fonction à partir d'un thread Python (créé en utilisant threading.Thread
classe) - tout en appelant la même fonction, à partir du thread principal Python fonctionne très bien.
Appeler le fil de fonction plantage de l'application, avec le message suivant:
First-chance exception at 0x03522e96 in python.exe:
0xC0000005: Access violation reading location 0x000000c8.
adresse de base de TBB.dll est 0x03510000, et selon débogueur MSVC 2005, l'accident se produit dans le code de « l'parallel_for.h de TBB », apparemment static void start_for::run( const Range& range, const Body& body, const Partitioner& partitioner)
lors de l'exécution:
start_for& a = *new(task::allocate_root(context)) start_for(range,body,const_cast<Partitioner&>(partitioner));
Il semble qu'il ya un pointeur NULL étant déréférencé.
FWIW, TBB est initialisé en utilisant le mécanisme d'initialisation différée:
// at 'global' scope
tbb::task_scheduler_init g_tbbinit(tbb::task_scheduler_init::deferred);
...
// in a function
g_tbbinit.initialize();
Y at-il moyen de faire ce travail? Par exemple, TBB a-t-il besoin d'une initialisation spécifique pour permettre son appel depuis un thread 'custom'?
Quel est le message d'erreur? – log0
@Ugo - question mise à jour pour ajouter plus d'informations – rotoglup