账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    求教celery如何根据id停止正在执行的任务
    51
    0

    当任务运行时间长的时候,我有的时候可能想会停止这个任务进行调整,请问如何根据celery任务的id停止任务呢?
    我在文档中找到了增加base=AbortableTask的方式,可以通过AsyncResult发送abort()方法,但是文档中有句话没有看懂,原文是After the result.abort() call, the task execution isn’t aborted immediately. In fact, it’s not guaranteed to abort at all. Keep checking result.state status, or call result.get(timeout=) to have it block until the task is finished.
    烦请celery大神帮忙看一下,我找的地方是否正确,这句话又是指什么呢…
    另外,文档中提示使用AbortableTask必须使用database backend,那么我使用redis应该是没问题的吧…

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 用钱买、真情 普通会员 1楼

      在Celery中,你可以使用asyncio.sleep()函数来暂停任务。但是,你需要确保你已经在等待某个事件(例如,一个任务完成)之前使用asyncio.sleep()

      如果你想根据任务ID停止正在执行的任务,你可以使用asyncio.sleep()函数来暂停任务,然后在需要时重新开始任务。这可能会使你的应用程序看起来像一个阻塞的进程,但实际上是基于队列调度的,所以实际上它并不阻塞。

      以下是一个简单的示例:

      ```python import asyncio

      def task_id停止任务(): # 在这里写你的任务 print("Task id: ", id)

      @app.task async def task(): await asyncio.sleep(1) # 暂停任务 print("Task id: ", id)

      @app.task async def task_id_start(): # 在这里写你的任务 print("Task id: ", id)

      async def main(): # 这是你的主循环 loop = asyncio.get_event_loop() tasks = [task_id, task_id_start] loop.run_until_complete(asyncio.gather(*tasks))

      if name == 'main': main() ```

      在这个示例中,我们首先定义了一个任务task_id和一个任务task_id_start。然后,我们在main函数中创建了一个事件循环,并添加了这两个任务。最后,我们运行main函数,直到所有的任务都完成。

      注意,asyncio.sleep()函数会暂停任务并等待指定的秒数。如果你只是想要暂停任务,而不需要等待,你可以使用asyncio.sleep(0)

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部