bamboo-engine icon indicating copy to clipboard operation
bamboo-engine copied to clipboard

Engine and BambooDjangoRuntime ProcessMixin are confusing

Open Randix6644 opened this issue 2 years ago • 0 comments

BambooDjangoRuntime的集合多个mixin 正常来说, 如果我想更改其中某一个功能, 例如Process的某些行为, 例如die 的方法, 我可以

class BambooDjangoRuntime(
    CustomProcessMixin,
)

或者

class CustomeRuntime(BambooDjangoRuntime):
    def die(self, process_id: int):
        do something()

但是经过测试这不符合预期。 因为我发现在pipeline/eri/celery/tasks.py 里面executeschedule 的方法里面:runtime = BambooDjangoRuntime() , runtime 是hardcode的, 即调用Engine(CustomeRuntime()).run_pipeline(pipeline) 时不会调用CustomeRuntime().die方法的。

文档没有特别说明, 另外一点是在自编写的component 里面, 如果在自定义组件的实例里面也无法保存属性, 只能通过data来传递。 因为每一次自定义component的schedule的调用都是一个新对象。

lastly, 能否将类似ProcessMixin或者一些其他类似的update 方法:e.g Process.objects.filter(id=process_id).update(suspended=True, suspended_by=by) 改为

obj = Process.get(id=process_id)
obj.suspended=True
obj.suspended_by = by
obj.save()

这用用户可以利用Django post_save的signal 去做一些自定义的行为。 例如我希望Process die的时候可以回调推送数据到websocket。

Randix6644 avatar Aug 12 '22 07:08 Randix6644