Módulo: Mongo::BackgroundThread Private

Inclui:
Logável
Incluído em:
Cluster::PeriodicExecutor, Servidor::ConnectionPool::Populator, Servidor::Monitor, Servidor::PushMonitor, SRV::Monitor
Definido em:
build/ruby-driver-v2.19/lib/mongo/background_thread.rb

Visão geral

Este módulo faz parte de uma API privada. Você deve evitar usar este módulo, se possível, pois ele pode ser removido ou alterado no futuro.

Observação:

Não inicie ou pare threads em segundo plano em finalizadores. Consulte jira.mongodb.org/browse/RUBY-2453 e bugs.ruby-lang.org/issues/{316288. Quando o intérprete sai, os threads de background são interrompidos primeiro e os finalizadores são invocados em seguida, e as estruturas de dados internas da MRI são essencialmente corrompidas nesse ponto se os threads estiverem sendo referenciados. Antes do desligamento do intérprete, isso significa que os threads não podem ser interrompidos por objetos que saem do escopo, mas o mais provável é que os threads mantenham referências aos mencionados objetos de qualquer maneira, se o trabalho estiver sendo executado, os objetos não Go do escopo em primeiro lugar.

A corrida!, Correndo? e pare! os métodos costumavam fazer parte da API pública em algumas das classes que agora incluem este módulo. Portanto, esses métodos devem ser considerados parte da API pública do driver por motivos de compatibilidade com versões anteriores. No entanto, o uso desses métodos fora do driver está obsoleto.

Resumo constante

Constantes incluídas do Loggable

Loggable::Prefix

Recolhimento do Resumo do método de instância

Métodos incluídos no Loggable

#log_debug, #log_error, #log_fatal, #log_info, #log_WARN, #logger

Detalhes do método de instância

#run!Objeto

Inicie a thread em segundo plano.

Se o thread já estiver em execução, esse método não fará nada.



46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'build/ruby-driver-v2.19/lib/mongo/background_thread.rb', linha 46

def corra!
  se @stop_requested && @thread
    wait_for_stop
    se @thread.alive?
      log_service("Iniciando um novo thread de background em #{self}, mas o thread de background anterior ainda está em execução")
      @thread = nada
    end
    @stop_requested = false
  end
  se executando?
    @thread
  mais
    comece!
  end
end

#em execução?Booleano

Retorna:

  • (Booleano)


63
64
65
66
67
68
69
# File 'build/ruby-driver-v2.19/lib/mongo/background_thread.rb', linha 63

def executando?
  se @thread
    @thread.alive?
  mais
    false
  end
end

#pare!verdadeiro | false

Interrompa o thread em background e aguarde o encerramento por um período de tempo razoável.

Retorna:

  • (verdadeiro | falso)

    Se a conversa foi encerrada.



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
106
107
# File 'build/ruby-driver-v2.19/lib/mongo/background_thread.rb', linha 77

def pare!
  # Se o thread não foi iniciado, não há nada para parar.
  #
  # As turmas que incluem este módulo podem querer realizar outras
  # limpeza, que eles podem fazer substituindo esse método.
  Método true a menos que @thread

  # Os threads em background geralmente executam operações em um loop.
  # Este sinalizador deve ser verificado em cada iteração do
  # loops de trabalho e o thread deve parar de funcionar quando este sinalizador
  # está definido.
  @stop_requested = true

  # Além de definir a bandeira, uma classe específica pode ter
  # formas de sinalizar à thread em background para parar de funcionar ou
  # acorda para verificar o sinalizador de parada, por exemplo, definindo um semáforo.
  # Isso pode ser feito fornecendo o método pre_stop.
  pre_stop

  # Agora solicitamos o encerramento correto e podemos esperar
  # para que a conversa saia por conta própria. Uma versão futura do
  # driver pode permitir um determinado período de tempo para que o thread seja encerrado.
  # Por enquanto, também usamos o mecanismo Ruby para solicitar o thread
  # seja encerrado e faça isso imediatamente.
  #
  # Observe que isso pode fazer com que a thread em background termine em
  # no meio de uma operação.
  @thread.matar

  wait_for_stop
end