celery實現分布式

2021-10-01 06:53:35 字數 1611 閱讀 8424

worker執行在不同的機器上,每台機器上有多個task程序;

worker執行的時候連線到broker,在控制機器上(任務發布節點)直接向broker傳送任務,只要建立乙個broker,在不同的機器上執行celery worker。

框架圖:

task.py:

# -*- coding: utf-8 -*-

from celery import celery

from celery.schedules import timedelta

from celery.task import periodic_task

class config:

broker_url = 'redis:'

celery_result_backend = 'redis:'

celery_timezone = 'asia/shanghai'

def println():

print("thanks for god")

return 'success'

def add(x, y):

print("x + y = {}".format(x+y))

return x+y

test.py檔案(任務生產者):

# -*- coding: utf-8 -*-

from tasks import add, println

for i in range(500):

println.delay()

add.delay(2, 2)

1、若想多台機器共同使用其中一台機器上的redis作為任務排程佇列broker,需要配置該機器上的redis檔案,配置完成後

務必重啟redis服務

2、將task.py與test.py放在broker伺服器(樣例中是10.21.144.110)的同一目錄下,同時將task.py檔案放到另一台worker伺服器上(10.21.144.111)

3、分別在兩台伺服器上啟動worker:

celery worker -a tasks -l info -q for_task_add #機器10.21.144.110接收佇列for_task_add中的任務交給worker處理

celery worker -a tasks -l info -q for_task_collect #機器10.21.144.111接收佇列for_task_collect中的任務交給worker處理

4、測試:執行python test.py

機器10.21.144.110上的worker處理結果:

機器10.21.144.111上的worker處理結果:

從兩張圖中,可以清楚地看到機器10.21.144.110產生的任務根據佇列被送往不同的機器上交給worker處理,實現了分布式。

Celery分布式應用

最近有應用需要部署到不同的伺服器上執行,但是有沒有pbs這樣的排程系統,就想起來python的排程神器 celery。現在針對我的實際應用做一些記錄。因為我並不注重結果而是把命令拿到不同的機器上執行,所以訊息 和結果儲存我都選擇了 redis 只需要在一台伺服器上安裝 redis,其他伺服器均使用該...

分布式佇列 Celery

詳情參見 分布式佇列神器 celery 2 celery 4.1 使用者指南 task 任務 3 celery 4.1 使用者指南 calling tasks 呼叫任務 4 celery 4.1 使用者指南 canvas designing work flows 設計工作流程 5 celery 4....

celery分布式使用

celery包含如下元件 1.celery beat 任務排程器,beat程序會讀取配置檔案的內容,周期性地將配置中到期需要執行的任務傳送給任務佇列 一般用於定時任務使用 2.celery worker 執行任務的消費者,通常會在多台伺服器執行多個消費者來提高執行效率。3.broker 訊息 或者叫...