Pergunta

Caso contrário, existe uma maneira de garantir a segurança do thread programando de uma certa maneira?

Para esclarecer, ao falar sobre "ThreadSafe", quero dizer threads python, não threads no nível do sistema operacional.

Foi útil?

Solução

Tudo depende da interação entre o seu código Cython e o GIL de Python, conforme documentado em detalhes aqui. Se você não fizer nada especial, o código gerado pelo Cython respeitará o GIL (assim como uma extensão codificada por C que não usa as macros libeentes de GIL); Isso torna esse código "como ThreadSafe como código Python"-o que não é muito, mas é mais fácil de manusear do que o código de fibra completamente livre (você ainda precisa arquitetar a cooperação e a sincronização com vários threads, idealmente com instâncias de filas, mas possivelmente com travando & c).

O código que renunciou ao GIL e ainda não o adquiriu de volta não deve interagir com o tempo de execução do Python e os objetos que o tempo de execução do Python usa-isso vale para o Cython tão bem quanto para extensões codificadas por C. É claro que a vantagem é que esse código pode ser executado em um núcleo separado (até que precise sincronizar ou se comunicar com o tempo de execução do Python novamente, é claro).

Outras dicas

O bloqueio global de intérpretes da Python significa que apenas um thread pode estar ativo no intérprete a qualquer momento. No entanto, uma vez que o controle seja distribuído para uma extensão C, outro encadeamento pode ser ativo dentro do intérprete. Vários encadeamentos podem ser criados e nada impede que um encadeamento seja interrompido no meio de uma seção crítica. N

No código seguro, pode ser implementado no intérprete, portanto, nada sobre o código em execução no intérprete é inerentemente seguro. O código nos módulos C ou Pyrex ainda pode modificar as estruturas de dados visíveis para o código Python. O código nativo pode, é claro, também ter problemas de rosqueamento com estruturas de dados nativas.

Você não pode garantir a segurança do encadeamento além do uso de design e sincronização apropriados - o GIL no intérprete Python não muda materialmente isso.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top