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

所有任务必须要放在同一个文件里? #29

Closed BhxslDean closed 1 year ago

BhxslDean commented 1 year ago

在一个文件里定义了xxl_handler = JobHandler(),然后其他文件引入发现其他文件注册的任务并不生效,看起来没有像路由那样的 include方法

fcfangcc commented 1 year ago

需要把xxl_handler传入executor启动的参数里面。如果还不生效可以发下案例代码,理论上不存在这个问题的

unner = PyxxlRunner(config, handler=xxl_handler)

有一种可能是你其他文件程序启动时没有被import ,需要 import 一下不然代码不会跑过去

BhxslDean commented 1 year ago

是没有导入的问题,但是所有的的handler都需要导入,看起来不太优雅,代码如下,在main里定义了一个任务,在other_job里也定义了一个,需要这样才可以两个都生效

··· def when_ready(server):

pylint: disable=import-outside-toplevel,unused-import,no-name-in-module

from other_job import xxl_handler
from main import xxl_handler

atexit.unregister(_exit_function)

config = ExecutorConfig(
    xxl_admin_baseurl="http://localhost:8080/xxl-job-admin/api/",
    executor_app_name="xxl-job-executor-sample",
    executor_host="127.0.0.1",
    debug=True,
    access_token="Lpoms_xxljob_default_token",
    executor_port=9988
)

runner = PyxxlRunner(config, handler=xxl_handler)
server.pyxxl_runner = runner
runner.run_with_daemon()

···

fcfangcc commented 1 year ago

不导入无法运行装饰器里面的代码,这个是Python的正常逻辑,都是这样的

BhxslDean commented 1 year ago

嗯嗯,这个是我疏忽了...只是觉得也许可以和flask或者fastapi的路由管理这样,通过类似 include_router 方法将所有task收集到执行器服务里或者在 PyxxlRunner 里直接就可以传 List[JobHandler],目前我看是只能传一个的 image

感谢回复昂