Pergunta

editar:im perguntando se variáveis globais são seguros em um single-threaded framework web como furacão

estou usando o mongoengine orm, que obtém uma conexão de banco de dados de uma variável global:

_get_db() # gets the db connection

também estou usando o tornado, um single-threaded framework web em python.em um determinado ponto de vista, eu preciso pegar uma conexão de banco de dados e eliminar referência a um DBRef [objeto semelhante a uma chave estrangeira]:

# dereference a DBRef
_get_db().dereference(some_db_ref)

uma vez que a conexão devolvidos por _get_db é um var global, há possibilidade de colisão e o errado valor a ser devolvido para o thread errado?

Foi útil?

Solução

Supondo que MongoEngine é de moldagem PyMongo (e creio que é), então você deve ser fino.PyMongo é completamente thread-safe.

Outras dicas

Threads são sempre necessários para manter o GIL quando interagindo com objetos Python.O espaço de nomes segurando as variáveis é um objeto Python (um frameobject ou um dict, dependendo do tipo de variável que é.) É sempre mais seguro para obter ou definir variáveis em vários segmentos.Você nunca vai conseguir dados de lixo.

No entanto, a corrida de costume condições aplicam-se para o objeto que você conseguir, ou qual objeto você substituir quando você atribuir.Uma declaração como x += 1 é não thread-safe, porque um thread diferente pode executar entre o get e o armazenamento, alterar o valor da x, o que você faria, então, substituir.

Não, mas bloqueios são bastante simples para usar em python.Use o tentar:finalmente:padrão para garantir que um bloqueio é liberado após você modificar sua variável global.

Não há nada sobre globais que torna-los mais ou menos thread-safe do que todas as outras variáveis.Se é possível ou não por uma operação falhar ou devolver resultados incorrectos quando executar em diferentes segmentos, a melhor prática é que você deve proteger os dados compartilhados entre threads.

Se eu estou lendo certo, você está perguntando se uma variável está seguro em um single-threaded ambiente.Neste caso, onde os dados são não compartilhada entre processos concorrentes, a variável é seguro (afinal, não há nada de mais em execução que pode interrompê-lo).

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