Módulo: Mongo::BackgroundThread Privado
- Incluye:
- Registrable
- Incluido en:
- Clúster::PeriodicExecutor, Servidor::ConnectionPool::Populator, Servidor::Monitor, Servidor::PushMonitor, Srv::Monitor
- Definido en:
- lib/mongo/background_thread.rb
Overview
Este módulo es parte de una API privada. Deberías evitar usar este módulo si es posible, ya que puede ser removido o cambiado en el futuro.
No inicie ni detenga subprocesos en segundo plano en los finalizadores. Consultar https://jira.mongodb.org/browse/RUBY-2453 y https://bugs.ruby-lang.org/issues/16288. Cuando el interprete sale, los subprocesos en segundo plano se detienen primero y luego se invocan los finalizadores, y las estructuras de datos internas de MRI están básicamente corruptas en este punto si se están refiriendo subprocesos. Antes de que el intérprete se apague, esto significa que los hilos no pueden ser detenidos por objetos que salen del alcance, pero lo más probable es que los hilos tengan referencias a dichos objetos de todos modos si se está realizando trabajo, por lo que los objetos no saldrían del alcance en primer lugar.
¡La ejecución!, ejecutando? ¡y parar! los métodos solían formar parte de la API pública en algunas de las clases que ahora incluyen este módulo. Por lo tanto, estos métodos deben considerarse parte de la API pública del controlador por motivos de compatibilidad con versiones anteriores. Cambiar a utilizar el método getByTestId tal vez puede proporcionar una experiencia de usuario más robusta. Sin embargo, el uso de estos métodos fuera del driver está en desuso.
Resumen constante
Constantes incluidas desde Loggable
Resumen del método de instancia colapsar
-
#ejecutar! ⇒ Objeto
Inicie el hilo de segundo plano.
- #ejecutándose? ⇒ Booleano
-
#stop! ⇒ true | false
Detén el hilo en segundo plano y espera a que termine durante un tiempo prudente.
Métodos incluidos desde Registrable
#log_debug, #log_error, #log_fatal, #log_info, #log_warn, #logger
Detalles del método de instancia
#ejecutar! ⇒ Objeto
Inicie el hilo de segundo plano.
Si el hilo ya se está ejecutando, este método no hace nada.
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# Archivo 'lib/mongo/background_thread.rb', línea 44 def ejecutar! si @solicitud_detencion && @thread esperar_detener si @thread.alive? log_warn("Iniciando un nuevo hilo en segundo plano en #{self}, pero el hilo anterior en segundo plano aún está ejecutándose") @thread = nulo end @solicitud_detencion = false end si ¿corriendo? @thread else ¡empezar! end end |
#en funcionamiento? ⇒ booleano
61 62 63 64 65 66 67 |
# Archivo 'lib/mongo/background_thread.rb', línea 61 def ¿corriendo? si @thread @thread.alive? else false end end |
#¡stop! ⇒ true | false
Detén el hilo en segundo plano y espera a que termine durante un tiempo prudente.
75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
# Archivo 'lib/mongo/background_thread.rb', línea 75 def ¡detente! # Si el hilo no se ha iniciado, no hay nada que detener. # # Las clases que incluyan este módulo pueden querer realizar operaciones adicionales # limpieza, lo cual pueden hacer sobreescribiendo este método. return true a menos que @thread # Los hilos en segundo plano generalmente realizan operaciones en un bucle. # Este indicador está destinado a ser verificado en cada iteración de la # bucles de trabajo y el hilo debe dejar de funcionar cuando esta bandera # está configurado. @solicitud_detencion = true # Además de configurar la bandera, una clase en particular puede tener información adicional # maneras de indicarle al hilo de segundo plano que deje de funcionar o # despertarse para comprobar la bandera de parada, por ejemplo, estableciendo un semáforo. # Esto puede lograrse proporcionando el método pre_stop. pre_stop # Ahora hemos solicitado la terminación elegante, y podríamos esperar # para que el hilo salga por su propia cuenta. Una versión futura del # el controlador puede permitir una cierta cantidad de tiempo para que el hilo se cierre. # Por ahora, además utilizamos la maquinaria de Ruby para solicitar el hilo # ser terminados y hacerlo inmediatamente. # # Ten en cuenta que esto puede causar que el subproceso de segundo plano termine en # la mitad de una operación. @thread.matar esperar_detener end |