繁体   English   中英

如何使我的语义功能以特定顺序执行?

[英]How can I make my Sematic functions execute in a particular order?

我正在使用https://sematic.dev ,并且我有几个要按特定顺序执行的 Sematic 函数,我们称它们为foobar

@sematic.func
def foo(x: int) -> int:
    print(f"Hi foo, {x}!")
    return x * 2

@sematic.func
def bar(x: int) -> int:
    print(f"Hi bar, {x}!")
    return x * 3


@sematic.func
def pipeline() -> typing.List[int]:
    return [foo(1), bar(1)]

print(pipeline().resolve())

但是当我在云中运行它时,有时bar先运行,而我总是希望foo先运行。 我怎样才能做到这一点?

一般来说,如果你问这个问题,通常意味着你想首先运行的东西和你想第二次运行的东西之间实际上存在数据依赖关系。 在您的情况下,可能有来自bar正在使用的foo的一些数据。 这些数据可能在一些外部系统(如数据库)中,这可能就是您尚未在 Sematic 函数中将其表示为输入和输出的原因。 最好的解决方案是使这种数据依赖显式化,让foo返回对bar使用的数据的引用并显式传递该引用。

但是,如果由于某种原因很难做到这一点,您总是可以通过将一个 function 的 output 提供给另一个函数的输入来创建两个函数之间的依赖关系(然后在第二个函数中忽略它)。 在你的情况下,看起来像这样:

@sematic.func
def foo(x: int) -> int:
    print(f"Hi foo, {x}!")
    return x * 2

@sematic.func
def bar(x: int, ignored: int) -> int:
    print(f"Hi bar, {x}!")
    return x * 3


@sematic.func
def pipeline() -> typing.List[int]:
    foo_result = foo(1)
    bar_result = bar(1, foo_result)
    return [foo_result, bar_result]

print(pipeline().resolve())

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM