fcfangcc / pyxxl

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

pyxxl这个库有封装对任务进行停止的函数或者方法吗 #47

Closed zzzjw666 closed 6 months ago

zzzjw666 commented 6 months ago

Problem description

详细描述你的问题 作者您好,现在我遇到一个问题,就是想在代码里面对任务进行停止,但是我看了一下pyxxl的文档,好像没有写对任务停止调用哪个函数或者方法

Steps to reproduce the problem

最好可以附上代码

Specifications like the version of the project, operating system, or hardware

fcfangcc commented 6 months ago

XXL-JOB-ADMIN界面上点击停止就行了,pyxxl会接收到停止信号的然后尝试中断任务

如果同步方法定义的任务,由于是线程池执行,不支持强制中断,需要你在代码中获取中断信号后自行停止

参考文档

from pyxxl.ctx import g
...
@app.register(name="sync_func")
def test_task4():
    # 如果同步任务里面有循环,为了支持cancel操作,通过判断g.cancel_event信号.
    while  not g.cancel_event.is_set():
        ... # 列如time.sleep(2)

    return "成功"

如果你的代码逻辑类似于如下,中间没有其他过程目前是无法中断的

@app.register(name="sync_func")
def test_task4():
    time.sleep(600)
    return "成功"

异步方法可以正常中断(里面所有的调用都要异步化)

@app.register
async def test_task4():
    await asyncio.sleep(600)
    return "成功"
zzzjw666 commented 6 months ago

就是不想在XXL-JOB-ADMIN界面上点击停止,而是想通过代码动态的去中断任务,pyxxl这个库现在有实现这个功能吗

fcfangcc commented 6 months ago

不是很理解你的意思

是指额外有个程序A去调用pyxxl-Executor程序来关闭指定任务? 还是说在pyxxl-Executor程序里面满足某个条件之后关闭指定任务?

zzzjw666 commented 6 months ago

你也可以理解为你所说的,有个程序A去调用pyxxl-Executor程序来关闭指定任务

fcfangcc commented 6 months ago

@zzzjw666 前提是需要知道jobid,可以调pyxxl-Executor http的这个接口 https://github.com/fcfangcc/pyxxl/blob/e40deaa7d7541dcfaa87dc3d2caf8b46a49f4df2/pyxxl/server.py#L66-L70

其他没有相关功能

zzzjw666 commented 6 months ago

好的,明白~