celery程式設計 supervisor監控

2021-09-27 12:51:07 字數 4477 閱讀 5404

二、使用配置檔案

啟動celery命令

三、定時任務

四、flower監控中介軟體

五、supervisor管理程序

主角 : celery

配角 : redis 或者 rabbitmq

linux:

pip install reids celery
windows

pip install redis eventlet
注意 :

windows上使用celery,bug很多,慎用!

啟動celery時,記得後面加上-p eventlet

borker 是中介軟體,可以使用 redis 或者 rabbitmq.

workers 就是 執行具體任務的**。 (比如下面的 tasks.py)

backend 是結果儲存的地方, 支援很多儲存方式,常見的是 支援sqlalchemy的資料庫、redis等。

broker只支援 redis, rabbitmq。

broker =

'redis://localhost:6379/1'

backend 可以使用很多,比如支援sqlalchemy的資料庫,redis也行。

backend =

'redis://localhost:6379/2'

result_backend =

'db+sqlite:/'

result_backend =

'db+mysql://scott:tiger@localhost/foo'

result_backend =

'db+postgresql://scott:tiger@localhost/mydatabase'

result_backend =

'db+oracle:'

tasks.py

import time

from celery import celery

database =

'redis'

ip =

'192.168.92.128'

port =

'6379'

uri = f"://:/"

+'{}'

# redis 2號 資料庫是 接受任務佇列

broker = uri.

format(2

)# redis 3號 資料庫是 儲存執行結果佇列

backend = uri.

format(3

)'my_task'

, broker=broker, backend=backend)

defadd

(x, y)

:print

('enter add, task is running ...'

) time.sleep(3)

return x + y

# 要在命令列中啟動workers

# win上的命令是 : celery worker -a tasks -p eventlet -l info -c 20

# linux或者mac : celery worker -a tasks -l info -c 20

-a : 指定worker工作的指令碼

-l : 日誌級別,預設是警告。

-c : 控制worker的數量。

from tasks import add

import time

if __name__ ==

'__main__'

: stime = time.time(

)# 實際上這樣呼叫只是把任務發給了worker,參見redis/2

# 後續怎麼執行,這個**裡根本不管。由celery接管,非同步執行。

# windows上

# linux,mac……

# config.py

from datetime import timedelta

from celery.schedules import crontab

redis_url =

'localhost:6379'

broker_url = f'redis:///2'

celery_result_backend = f'redis:///3'

celery_timezone =

'asia/shanghai'

celery_imports =(,

,)# 第乙個是每隔一段時間執行,

# 第二個是在每天的幾點幾分執行。

celerybeat_schedule =

,'task2'

:}

其實是使用celery beat命令,此命令用定時執行

使用 pip install flower 安裝該模組。

簡單監控

celery flower --broker=redis://localhost:6379/2 --address=0.0.0.0 --port=5555
然後瀏覽器開啟 http://localhost:5555 即可。

這是乙個用於程序管理的工具,功能極其強大!

由幾個元件構成

樣例:

# sv.conf

# 開啟web監控,可以通過web控制程序。

123# 建立乙個監控程序,名字叫 ******_celery_test

[program:******_celery_test]

priority=

999directory=

/home/blueky/sourcecode/celery_code/celery001

stdout_logfile=

/home/blueky/sourcecode/celery_code/celery001/log/out.log

stderr_logfile=

/home/blueky/sourcecode/celery_code/celery001/log/err.log

command=celery worker -a tasks -c 10

supervisord -c sv.conf
瀏覽器開啟 http://localhost:9001 即可。

修改配置檔案

終端輸入 supervisorctl

在互動式命令列中輸入 update即可

風火程式設計 python發布celery非同步任務

1.建立celery應用from celery import celery name broker celery backend celery 定義celery任務 def celery job args,kwargs 定義非同步任務 return result 任務邏輯 3.發布celery任務c...

Linux後台程序管理利器 supervisor

linux的後台程序執行有好幾種方法,例如nohup,screen等,但是,如果是乙個服務程式,要可靠地在後台執行,我們就需要把它做成daemon,最好還能監控程序狀態,在意外結束時能自動重啟。supervisor就是用python開發的一套通用的程序管理程式,能將乙個普通的命令列程序變為後台dae...

celery系列 一 celery 相關配置

celery result backend amqp 官網優化的地方也推薦使用c的librabbitmq celery task result expires 1200 celery任務執行結果的超時時間,我的任務都不需要返回結果,只需要正確執行就行 celeryd concurrency 50 c...