2009-09-09 5 views

Répondre

5

Tout dépend de l'interaction entre votre code Cython et GIL de Python, comme documenté en détail here. Si vous ne faites rien de spécial, le code généré par Cython respectera le GIL (tout comme une extension codée en C qui n'utilise pas les macros libérant GIL); Cela rend ce code "aussi sûr que le code Python" - ce qui n'est pas beaucoup, mais est plus facile à manipuler que le code de threading complètement libre (vous avez encore besoin d'architecturer la coopération et la synchronisation multi-thread, idéalement avec verrouillage & c). Le code qui a abandonné le GIL et ne l'a pas encore acquis ne doit en aucun cas interagir avec le runtime Python et les objets utilisés par le runtime Python - cela vaut aussi bien pour Cython que pour les extensions codées en C. L'avantage de cela est évidemment que ce code peut fonctionner sur un noyau séparé (jusqu'à ce qu'il ait besoin de se synchroniser ou de communiquer de toute façon avec le runtime Python, bien sûr).

2

Python moyen de verrouillage de l'interpréteur mondial qu'un seul thread peut être actif dans l'interprète à un moment donné. Cependant Une fois que le contrôle est transmis à une extension C, un autre thread peut être actif dans l'interpréteur Plusieurs threads peuvent être créés et rien n'empêche d'interrompre un thread au milieu d'une section critique N

sur thread-safe le code peut être implémenté dans l'interpréteur, donc rien sur le code qui s'exécute dans l'interpréteur n'est intrinsèquement thread safe.Code dans les modules C ou Pyrex peut encore modifier les structures de données qui sont visibles pour le code python. Le code natif peut, bien sûr, également avoir des problèmes de threading avec des structures de données natives.

Vous ne pouvez pas garantir la sécurité des threads au-delà de la conception et de la synchronisation appropriées - le GIL sur l'interpréteur Python ne change pas matériellement ceci.

Questions connexes