Pregunta

Edit: im preguntando si las variables globales están a salvo en un marco Web de un solo subproceso como un tornado

im usando el ORM mongoengine, que consigue una conexión de base de datos de una variable global:

_get_db() # gets the db connection

im también usando tornado, un solo subproceso marco pitón web. en una vista particular, i necesidad de agarrar una conexión de base de datos y eliminar la referencia de un objeto DBRef [similar a una clave externa]:

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

ya que la conexión devuelto por _get_db es una var mundial, hay una posibilidad de colisión y el valor incorrecto se devuelve al hilo equivocado?

¿Fue útil?

Solución

Suponiendo MongoEngine está terminando PyMongo (y yo creo que lo es), entonces usted debe estar bien. PyMongo es completamente seguro para subprocesos.

Otros consejos

Hilos siempre se requieren para sostener el GIL al interactuar con los objetos de Python. El espacio de nombres de la celebración de las variables es un objeto de Python (ya sea un frameobject o un diccionario, dependiendo de qué tipo de variables que es.) Es siempre seguro para obtener o establecer las variables en varios subprocesos. Nunca se tiene datos de la basura.

Sin embargo, no se aplican las condiciones de carrera habituales en cuanto a qué objeto se obtiene, o cuál es el objeto de reemplazar cuando se asigna. Una declaración como x += 1 es de no seguro para subprocesos, porque un subproceso diferente puede funcionar entre el get y la tienda, cambiando el valor de x, que usted entonces sobrescribir.

No, pero cerraduras son bastante sencillos de usar en Python. Utilice el intento: por último:. Patrón para asegurarse de que un bloqueo se libera después de modificar su variable global

No hay nada acerca globales que los hace más o menos hilo prevenir que cualquier otra variable. Si es o no es posible para una operación a fallar o devolver resultados incorrectos cuando se ejecuta en diferentes hilos, lo mejor es que usted debe proteger los datos compartidos entre los hilos.

Si te lo estoy leyendo, estás preguntando si una variable es seguro en un entorno de un solo subproceso. En este caso, donde los datos son no compartida entre procesos concurrentes, la variable es segura (después de todo, no hay nada más que pueda correr interrumpirlo).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top