fcfangcc / pyxxl

XXL-JOB的Python执行器实现,可以方便的将Python方法注册到XXL-JOB的调度中心上进行管理
https://fcfangcc.github.io/pyxxl/
GNU General Public License v3.0
55 stars 14 forks source link

这几天使用发现一个问题。 #14

Closed zacat closed 2 years ago

zacat commented 2 years ago

运行任务有时候JOB不会执行任何操作。

fcfangcc commented 2 years ago

能更具体点吗?比如什么阻塞策略、定时周期、任务大概执行多久。

可以把日志改为debug模式,每一次接受任务、执行完毕等都会打日志,可以把未执行的task的日志发给我看看

import logging
logger = logging.getLogger("pyxxl")
handler = logging.StreamHandler()
logger.addHandler(handler)
logger.setLevel(logging.DEBUG)
zacat commented 2 years ago

好,我测试一下。

zacat commented 2 years ago

@app.handler.register(name="dyVideoJobHandler") async def dy_video_job_handler(): quart = json.loads(g.xxl_run_data.executorParams)

定义是这样写,同时先向启动任务,如果上一个任务没有结束,没有接收到任务日志,进行启动。

fcfangcc commented 2 years ago

一个executor只能同时执行一个相同的jobId的任务(不同的jobId可以同时执行)

上一个没结束的话,会根据阻塞策略进行配置;可以查看xxl-admin的文档,目前py的都是支持这个规则的

    - 阻塞处理策略:调度过于密集执行器来不及处理时的处理策略;
        单机串行(默认):调度请求进入单机执行器后,调度请求进入FIFO队列并以串行方式运行;
        丢弃后续调度:调度请求进入单机执行器后,发现执行器存在运行的调度任务,本次请求将会被丢弃并标记为失败;
        覆盖之前调度:调度请求进入单机执行器后,发现执行器存在运行的调度任务,将会终止运行中的调度任务并清空队列,然后运行本地调度任务;
zacat commented 2 years ago

就是不同的jobId

image

fcfangcc commented 2 years ago

你方法里面是异步的吗,如果方法里面是同步阻塞的,那么定义的时候不能用async定义

@app.handler.register(name="dyVideoJobHandler")
def dy_video_job_handler():
    quart = json.loads(g.xxl_run_data.executorParams)
zacat commented 2 years ago

果然是这样的问题,谢谢了。