支持多个休伊队列的Django休伊扩展。
hueyx的Python项目详细描述
休克斯
一个Django扩展,用于运行具有多个队列的Huey。 多个队列允许任务不相互阻塞并独立扩展。 只支持redis存储。
重要
- 如果使用
huey 1.x
,则安装hueyx 0.1.2
。签出git标记huey1.x。 - 如果使用
huey 2.x
,则安装hueyx >= 1.0
。
使用量
用
安装pip install hueyx
在已安装的应用程序中添加Hueyx。
INSTALLED_APPS=['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','hueyx',]
设置.py
与djhuey相比,hueyx允许在settings.py中定义多个队列。
HUEYX={'queue_name1':{'connection':{'host':'localhost','port':6379,'db':0,},'consumer':{'workers':1,'worker_type':'process',}},'queue_name2':{'connection':{'connection_pool':ConnectionPool(host='localhost',port=6379,db=1)},'consumer':{'multiple_scheduler_locking':True,'prometheus_metrics':True,'workers':2,'worker_type':'thread',}},}
设置与Djhuey中的几乎相同。 看看huey documentation 查看参数的确切用法。
例外情况:
- 只能将redis配置为存储引擎。
- 不支持
name
和backend_class
参数。 - 添加了选项
multiple_scheduler_locking
和prometheus_metrics_enabled
。见下文。 - 添加了
db_task
的参数heartbeat_timeout
。见下文。
任务.py
fromhueyx.queuesimporthueyx"""Define which queue you want to use.They are predefined in settings.py."""HUEY_Q1=hueyx('queue_name1')HUEY_Q2=hueyx('queue_name2')@HUEY_Q1.task()defmy_task1():print('my_task1 called')@HUEY_Q1.db_task()defmy_db_task1():print('my_db_task1 called')@HUEY_Q2.task()defmy_task2():print('my_task2 called')@HUEY_Q2.periodic_task(crontab(minute='0',hour='3'))defmy_periodic_task2():print('my_periodic_task2 called')return1@HUEY_Q2.db_task(heartbeat_timeout=120)defmy_heartbeat_task(heartbeat:Heartbeat):withheartbeat.long_running_operation():print('This operation can take a while -> don\'t check for heartbeats')print('Now we check for heartbeats -> call heartbeat() periodically')heartbeat()
将任务推送到队列
fromexample.tasksimportmy_task1,my_db_task1,my_task2my_task1()# Task for queue_name1my_db_task1()# Task for queue_name1my_task2()# Task for queue_name2
运行消费者
消费者以队列名称开始。
./manage.py run_hueyx queue_name1
心跳任务
heartbeat任务是参数为heartbeat_timeout
的任务。它以秒为单位定义超时时间。
他们得到一个heartbeat对象,需要调用它才能将heartbeat发送给redis。
如果在设置超时时间内没有心跳,则假定任务已死亡,并将自动重新启动。
heartbeat_timeout
至少需要120秒。它不能与参数include_task
一起工作。
附加设置
多个调度程序锁定
multiple_scheduler_locking
已添加以支持多个huey调度程序。
如果您在云环境中运行huey,那么最终将运行多个huey实例,每个实例都将
安排定期任务。
multiple_scheduler_locking
防止周期性任务被多次调度。默认为false。
休伊信号
可选地,如果启用了hueyx,则将所有huey信号推送到redis pubsubhueyx.huey2.signaling
。
HUEYX_SIGNALS={'enabled':True,'environment':'your environment'}
消息的格式为
{'environment':settings.HUEYX_ENVIRONMENT,'queue':queue,'pid':pid,'signal':signal_name,'task':task_name}
环境参数是可选变量。
普罗米修斯
huey-exporter项目接收信号并将其报告给普罗米修斯。