celery beat原理分析 定時任務原始碼分析

2021-10-25 12:46:47 字數 2343 閱讀 9343

def start(self, embedded_process=false):

info('beat: starting...')

debug('beat: ticking with max interval->%s',

humanize_seconds(self.scheduler.max_interval))

signals.beat_init.send(sender=self)

if embedded_process:

signals.beat_embedded_init.send(sender=self)

platforms.set_process_title('celery beat')

try:

while not self._is_shutdown.is_set():

interval = self.scheduler.tick() # 核心中的核心方法,返回下乙個最近任務還剩多少時間

if interval and interval > 0.0:

debug('beat: waking up %s.',

humanize_seconds(interval, prefix='in '))

time.sleep(interval) # 下乙個最近任務大於0,則開始休眠

if self.scheduler.should_sync():

self.scheduler._do_sync()

except (keyboardinterrupt, systemexit):

self._is_shutdown.set()

finally:

self.sync()

self.scheduler.tick()**如下:

"""run a tick - one iteration of the scheduler.

executes one due task per call.

returns:

float: preferred delay in seconds for next call.

"""adjust = self.adjust

max_interval = self.max_interval # 最大的休眠時間, 預設300s

if (self._heap is none or

not self.schedules_equal(self.old_schedulers, self.schedule)):

self.old_schedulers = copy.copy(self.schedule)

self.populate_heap()

h = self._heap

if not h:

return max_interval

event = h[0] # 獲取堆中第乙個資料,即定時任務列表中的第乙個任務事件

entry = event[2]

is_due, next_time_to_run = self.is_due(entry) # 檢查該modelentry是否可以執行,獲取下一次執行的時間

if is_due:

if verify is event:

next_entry = self.reserve(entry)

# _siftdown會把任務進行排序,使得堆內的排序一直是下次任務距離時間由小到大

event[1], next_entry))

return 0

else:

return min(verify[0], max_interval)

return min(adjust(next_time_to_run) or max_interval, max_interval) # 返回下次執行時間

_siftdown**如下:

def _siftdown(heap, startpos, pos):

newitem = heap[pos]

# follow the path to the root, moving parents down until finding a place

# newitem fits.

while pos > startpos:

parentpos = (pos - 1) >> 1

parent = heap[parentpos]

if newitem < parent:

heap[pos] = parent

pos = parentpos

continue

break

heap[pos] = newitem

定序回歸分析

is.na data 判斷是否存在缺失 上述中,母親年齡為觀測變數,公民同招的態度為控制變數。分析不同的母親年齡對公民新招的態度情況。將母親年齡作為變差分解,組間離平方和為241.7,組內離差平方和為4108.6,他們的自由度分別為4和319,離 差平方和除以自由度得到方差,組間方差為60.424,...

原理分析 煙氣分析儀工作原理

煙氣分析儀的工作原理常用兩種,一種是電化學工作原理,另一種是紅外工作原理。目前市場上的可攜式煙氣分析儀通常是這兩種原理相結合,電化學煙氣分析儀一般有德國菲索 德國mru德國德圖,國產的有天虹嶗應等,紅外煙氣分析儀廠家一般有德國mru,德國西門子等。以下是這兩種煙氣分析儀的工作原理介紹 電化學氣體感測...

fork原理分析

note4 首先必須有一點要清楚,函式的返回值是儲存在暫存器eax中的。其次,當fork返回時,新程序會返回0是因為在初始化任務結構時,將eax設定為0 在fork中,把子程序加入到可執行的佇列中,由程序排程程式在適當的時機排程執行。也就是從此時開始,當前程序 為兩個併發的程序。無論哪個程序被排程執...