Question

Dans le cas contraire, est-il un moyen que je peux garantir la sécurité des threads en programmant une certaine façon?

Pour clarifier, quand on parle de « threadsafe, je veux dire des fils Python, pas les threads OS niveau.

Était-ce utile?

La solution

Tout dépend de l'interaction entre votre code Cython et GIL Python, comme documenté en détail ici . Si vous ne faites rien de spécial, le code généré Cython respectera le GIL (tout comme une extension codée C qui n'utilise pas les macros GIL-Releasing); qui fait un tel code « comme threadsafe code Python » - ce qui est peu, mais elle est plus facile à manipuler que complètement le code sans filetage (vous devez toujours architecte coopération multi-thread et la synchronisation, idéalement avec les instances de file d'attente, mais peut-être avec verrouillage et c).

Le code qui a abandonné le GIL et non encore acquis en arrière ne doivent en aucune façon d'interagir avec le moteur d'exécution Python et les objets que le temps d'exécution Python utilise - cela vaut pour Cython aussi bien que pour les extensions codées en C. L'avantage de cela est bien sûr que tel code peut être exécuté sur un noyau séparé (jusqu'à ce qu'il a besoin de synchroniser ou de toute façon de communiquer avec le moteur d'exécution de python de nouveau, bien sûr).

Autres conseils

verrouillage de l'interpréteur Python global signifie qu'un seul thread peut être actif dans l'interprète à un moment donné. Cependant, une fois que la commande est transmise vers une extension C un autre fil peut être active à l'intérieur de l'interpréteur. Plusieurs threads peuvent être créés, et rien n'empêche un fil d'être interrompu dans le milieu d'une section critique. N

sur le code thread-safe peut être mis en œuvre au sein de l'interprète, donc rien sur le code en cours d'exécution au sein de l'interpréteur est thread à sécurité intrinsèque. Code de modules C ou Pyrex peut encore modifier les structures de données qui sont visibles pour le code de python. Le code natif peut, bien sûr, ont aussi des problèmes avec filetage des structures de données natives.

Vous ne pouvez pas garantir la sécurité de fil au-delà en utilisant la conception et la synchronisation appropriée -. GIL sur l'interpréteur python ne change pas de façon importante cette

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top