模块:Mongo::BackgroundThread Private

包括:
Loggable
包含在:
Cluster::PeriodicExecutorServer::ConnectionPool::PopulatorServer::MonitorServer::PushMonitorSrv::Monitor
定义于:
构建/ruby-driver-v2.19/lib/ mongo /background_thread.rb

Overview

该模块是私有 API 的一部分。 您应尽可能避免使用此模块,因为它将来可能会被删除或更改。

注意:

不要在终结器中启动或停止后台线程。 请参阅jira.mongodb.org/browse/RUBY- 2453bugs.Ruby-lang.org/issues/ 16288 。 当解释器退出时,后台线程首先停止,然后调用终结器,如果正在引用线程,则 MRI 的内部数据结构此时基本上已损坏。 在解释器关闭之前,这意味着线程不能被超出作用域的对象停止,但如果正在执行工作,线程很可能无论如何都会保留对所述对象的引用,因此对象一开始就不会Go作用域。

运行!,运行?停止! 方法曾经是某些类中公共API的一部分,现在包含此模块。 因此,出于向后兼容性的考虑,必须将这些方法视为驱动程序公共API的一部分。 但是,在驾驶员外部使用这些方法已被弃用。

常量摘要

Loggable中包含的常量

Loggable::PREFIX

实例方法摘要折叠

Loggable中包含的方法

#log_debug#log_error#log_ Fatal#log_info#log_warn#logger

实例方法详细信息

# 运行!对象

启动后台线程。

如果线程已在运行,则此方法不执行任何操作。



46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'build/Ruby-driver-v 2.19 /lib/mongo/background_thread.rb', 第46行

def 运行!
  if @stop_requested && @thread
    wait_for_stop
    if @thread.alive?
      log_warn(" #{ self } 中启动新的后台线程 ,但上一个后台线程仍在运行 ")
      @thread = nil
    end
    @stop_requested = false
  end
  if 运行?
    @thread
  else
    开始!
  end
end

# 运行?布尔

返回:

  • 布尔值


63
64
65
66
67
68
69
# File 'build/Ruby-driver-v 2.19 /lib/mongo/background_thread.rb', 第63行

def 运行?
  if @thread
    @thread.alive?
  else
    false
  end
end

# stop!true | false

停止背景线程并等待合理的时间终止。

返回:

  • ( true | false )

    线程是否已终止。



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-v 2.19 /lib/mongo/background_thread.rb', 第77行

def 停止!
  # 如果线程未启动,则无需停止。
  #
  # 包含此模块的类可能想要执行额外的
  # 清理,他们可以通过覆盖此方法来执行清理。
  return true 除非 @thread

  # 后台线程通常在循环中执行操作。
  # 此标志应在每次迭代时进行检查
  # 工作循环,当此标志时,线程应停止工作
  # 已设置。
  @stop_requested = true

  # 除了设置标志之外,特定类还可能有额外的
  # 向背景线程发出信号以停止工作或
  # 唤醒以检查停止标志,示例设置信号量。
  # 这可以通过提供 pre_stop 方法来完成。
  pre_stop

  # 现在我们已请求优雅终止,可以等待
  # 以便线程自行退出。 未来版本的
  # 驱动程序可能会允许线程在一定时间内退出。
  # 目前,我们还使用Ruby机制来请求线程
  # 被终止,并立即终止。
  #
  # 请注意,这可能会导致背景线程终止
  # 操作的中间。
  @thread.kill

  wait_for_stop
end