celery中API Reference(celery.app.control)

官方文档:celery.app.control — Celery 5.2.7 documentation

worker远程控制命令的客户端。

服务器实现在celery.worker.control. 有两种类型的远程控制命令:

Inspect commands: 

        没有副作用,通常只会返回在 worker 中找到的一些值,如当前注册任务列表、活动任务列表等。命令可通过Inspect类访问。

Control commands:

        执行副作用,比如添加一个新的队列来消费。命令可通过Control类访问。

class celery.app.control.Control(app=None):

pass

创建一个多任务python环境

目录结构如下所示:

其中,tasks是消费者模块,有管理的celery文件,有多个任务函数文件。produce_task1模拟消费者,测试异步任务调用,produce_task2模拟定时任务调用。

celery启动

celery -A celery_demo2.tasks.celery worker --loglevel=info -P eventlet

注意:在windows中执行时,添加-P eventlet,否则可能报错。

Ping

ping(destination=None)

Ping 所有(或特定)worker。

destination ( List ) – 如果设置,则向所有worker广播时向其发送命令的主机列表。

celery启动,指定名称-n,这儿启动两个来演示:

celery -A celery_demo2.tasks.celery worker -n dgw_node1 --loglevel=info -P eventlet
celery -A celery_demo2.tasks.celery worker -n dgw_node2 --loglevel=info -P eventlet

示例代码:   【此时任务被两个worker都进行消费了】

from celery_demo2.tasks.task1 import send_email
from celery_demo2.tasks.task2 import send_msg
from celery_demo2.tasks.celery import app
from celery import current_app


result1 = send_email.delay('张三')
print(f"任务ID{result1.id}")
result2 = send_msg.delay('王五')
print(f"任务ID{result2.id}")
ret = app.control.ping()
print(ret)

ret2 = app.control.ping(destination=['celery@dgw_node1'])
print(ret2)

ret3 = app.control.ping(destination=['celery@dgw_node2'])
print(ret3)

print("*" * 100)

ret4 = app.control.inspect().ping()
print(ret4)

ret5 = app.control.inspect().ping(destination=['celery@dgw_node1'])
print(ret5)

print("*" * 100)

ret6 = current_app.control.ping()
print(ret6)

ret7 = current_app.control.ping(destination=['celery@dgw_node1'])
print(ret7)

print("*" * 100)

ret8 = current_app.control.inspect().ping()
print(ret8)

ret9 = current_app.control.inspect().ping(destination=['celery@dgw_node1'])
print(ret9)

ret10 = current_app.control.inspect().ping(destination=['celery@dgw_node2'])
print(ret10)

print("程序执行完毕!")

运行结果:

registered

registered(*taskinfoitems)

返回每个worker的所有注册任务。

taskinfoitems ( Sequence [ str ] ) –Task 要包含的属性列表。

启动celery两个worker。

示例代码:

from celery_demo2.tasks.task1 import send_email
from celery_demo2.tasks.task2 import send_msg
from celery_demo2.tasks.celery import app
from celery import current_app


result1 = send_email.delay('张三')
print(f"任务ID{result1.id}")
result2 = send_msg.delay('王五')
print(f"任务ID{result2.id}")

ret1 = app.control.inspect().registered()
print(ret1)

ret2 = app.control.inspect().registered('serializer', 'max_retries')
print(ret2)

print("*" * 100)

ret3 = current_app.control.inspect().registered()
print(ret3)

ret4 = current_app.control.inspect().registered('serializer', 'max_retries')
print(ret4)

print("程序执行完毕!")

运行结果:

registered_tasks

该方法同registered。

current_app.control.inspect().registered_tasks()
current_app.control.inspect().registered_tasks('serializer', 'max_retries')

report

report( ):为每个worker返回人类可读的报告。

同样启动celery两个worker。

示例代码:

from celery_demo2.tasks.task1 import send_email
from celery_demo2.tasks.task2 import send_msg
from celery_demo2.tasks.celery import app
from celery import current_app


result1 = send_email.delay('张三')
print(f"任务ID{result1.id}")
result2 = send_msg.delay('王五')
print(f"任务ID{result2.id}")

ret1 = app.control.inspect().report()
print(ret1)

print("*" * 100)

ret2 = current_app.control.inspect().report()
print(ret2)

print("程序执行完毕!")

运行结果:

reserved

reserved(safe=None):当前保留任务的返回列表,不包括scheduled/active。

同样启动celery两个worker。

示例代码:

from celery_demo2.tasks.task1 import send_email
from celery_demo2.tasks.task2 import send_msg
from celery_demo2.tasks.celery import app
from celery import current_app


result1 = send_email.delay('张三')
print(f"任务ID{result1.id}")
result2 = send_msg.delay('王五')
print(f"任务ID{result2.id}")

ret1 = app.control.inspect().reserved()
print(ret1)

print("*" * 100)

ret2 = current_app.control.inspect().reserved()
print(ret2)

print("程序执行完毕!")

运行结果:

revoked

revoked():返回已撤销任务的列表。

同样启动celery两个worker。

示例代码:

from celery_demo2.tasks.task1 import send_email
from celery_demo2.tasks.task2 import send_msg
from celery_demo2.tasks.celery import app
from celery import current_app


result1 = send_email.delay('张三')
print(f"任务ID{result1.id}")
result2 = send_msg.delay('王五')
print(f"任务ID{result2.id}")

ret1 = app.control.inspect().revoked()
print(ret1)

print("*" * 100)

ret2 = current_app.control.inspect().revoked()
print(ret2)

print("*" * 100)
print("停止某个任务")

app.control.revoke(result1.id, terminate=True)

ret3 = app.control.inspect().revoked()
print(ret3)

print("*" * 100)

ret4 = current_app.control.inspect().revoked()
print(ret4)

print("程序执行完毕!")

运行结果:

参考博文:

celery简单实现异步任务和定时任务_IT之一小佬的博客-CSDN博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值