2012-04-03 7 views
1

J'ai un problème avec mon application (jeu), qui utilise Boost.Python, quand il s'agit de la partie script. J'ai un thread client et un thread de serveur qui s'exécute dans le même processus si vous ne vous connectez pas à un serveur externe.Exécution de deux scripts python parallèlement à boost :: python

C'est ici que mes problèmes surviennent: Il semble que l'interpréteur Python ne puisse pas exécuter des scripts dans le thread client parallèlement aux scripts du thread serveur, car cela provoque le blocage de l'application. Donc, ma question est la suivante: Y a-t-il une possibilité d'exécuter deux (ou plus) scripts en parallèle dans l'interpréteur Python? J'ai cherché toute la journée et trouvé beaucoup d'informations concernant Py_NewInterpreter, mais cela ne résout pas mon problème car il utilise GIL, je ne veux pas que l'interpréteur bloque l'exécution d'autres scripts car cela entraînera un lag sur le client et/ou le côté serveur.

Répondre

1

A ce jour, vous ne pouvez pas éviter les interactions GIL lors de l'utilisation de threads python dans le même processus.

Vous voudrez peut-être jeter un oeil au module multiprocessing qui est conçu pour générer facilement des processus Python, n'interagissant donc pas avec GIL.

Une autre option consiste à publier explicitement le GIL lorsqu'il n'est pas nécessaire dans vos fonctions C/C++ encapsulées. Cela peut être fait en utilisant les fonctions PyEval_SaveThread et PyEval_RestoreThread.

+1

Tous les détails sur GIL Tiwtiling ici http://stackoverflow.com/questions/8009613/boost-python-not-supporting-parallelism/8011153#8011153 –

Questions connexes