ydf0509 / funboost

pip install funboost,python全功能分布式函数调度框架,funboost的功能是全面性重量级,用户能想得到的功能99%全都有;funboost的使用方式是轻量级,只有@boost一行代码需要写。支持python所有类型的并发模式和一切知名消息队列中间件,支持如 celery dramatiq等框架整体作为funboost中间件,python函数加速器,框架包罗万象,用户能想到的控制功能全都有。一统编程思维,兼容50% python业务场景,适用范围广。只需要一行代码即可分布式执行python一切函数,99%用过funboost的pythoner 感受是 简易 方便 强劲 强大,相见恨晚 。
Apache License 2.0
682 stars 135 forks source link

[请教]如何手动设置 task_id #119

Closed anjia0532 closed 2 months ago

anjia0532 commented 2 months ago

场景描述: 我写了个工具,定时主动检查上游upstream节点是否存活。 翻阅funboost文档,有两种方案

  1. 在健康检查的任务里循环upstream节点,再次push/publish新消息到实例检查队列里(但是无法将两个队列的task_id串起来)
  2. 在健康检查的任务里 Thread().start() 启动多线程,但是在子线程里log.info获取的task_id是no_task_id

java的相关文章 https://blog.csdn.net/qq_38989725/article/details/131860921


@boost(boost_params=FunboostCommonConfig(queue_name='queue_instance_health_check', qps=100))
def instance_health_check(....):
  # 具体逻辑
  pass

@boost(boost_params=FunboostCommonConfig(queue_name='queue_health_check_job', qps=50, ))
def health_check(target: dict):
    fct = funboost_current_task()
    instances = [.........]
    # 第一种
    for instance in instances:
        instance_health_check.push(...)

    # 第二种
    threads = []
    for instance in instances:
        t = Thread(target=instance_health_check, args=(....))
        t.start()
        threads.append(t)
    for t in threads:
        t.join()
anjia0532 commented 2 months ago

找到了,https://funboost.readthedocs.io/zh-cn/latest/articles/c4.html#pushpublish

https://github.com/anjia0532/discovery-syncer-python/blob/5a7fd2b8c1c29a318e449fb88d34af9f4edd79aa/app/tasks/task_syncer.py#L68-L92

ydf0509 commented 2 months ago

image

上下文是基于同个线程或协程的, 如果你要在不同线程传递上下文,t = Thread(target=instance_health_check, args=(....)) 请改成 t = FctContextThread(target=instance_health_check, args=(....)) ,这个类能自动吧当前线程的上下文设置到新的线程里面

ydf0509 commented 2 months ago

FctContextThread 专门处理跨线程获取fct

anjia0532 commented 2 months ago

好的,多谢。框架很好用,并且有问题大佬回复的又快又专业又耐心。所以我在我项目里置顶鸣谢 funboost

anjia0532/discovery-syncer-python#鸣谢

ydf0509 commented 2 months ago

好的,多谢。框架很好用,并且有问题大佬回复的又快又专业又耐心。所以我在我项目里置顶鸣谢 funboost

anjia0532/discovery-syncer-python#鸣谢

😄😄