支持多个休伊队列的Django休伊扩展。

hueyx的Python项目详细描述


休克斯

PyPI version

一个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配置为存储引擎。
  • 不支持namebackend_class参数。
  • 添加了选项multiple_scheduler_lockingprometheus_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项目接收信号并将其报告给普罗米修斯。

合作者

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java UTF8字符串到字节[],每个字符为单字节   java在groovy中扩展LinkedHashMap时如何重写equals   java将JavaFx添加到小程序   排序Java静态列表在一段时间后失去了顺序   java从web应用程序写入属性文件   java默认异常处理程序的工作原理   java在从不同文件添加时缺少GUI元素   java oauth2 springsecurity在请求令牌或代码之前是否应该登录   如何在Android/Java中保存数据对象?   java如何编写oracle查询作为通用的联合替代方法   java信息。普利斯特。如何指定多个可执行文件?   java Log4j SMTP附加程序   java使用Jackson将Java8 LocalDateTime序列化为UTC时间戳   java从列表<MyClass>转换到列表<Interface>   音频Java剪辑帧位置卡住   java E/Ads:添加Interstitual时无法获取Isadifakefordebuglogging错误   java Maven+Jenkins+Testng运行测试后构建失败   java JOptionPane将我的代码转化为实际的游戏