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 訊息 或者叫...