gpt4 book ai didi

python - 如何在 Python 中配置装饰器

转载 作者:行者123 更新时间:2023-11-28 20:55:53 27 4
gpt4 key购买 nike

我正在尝试使用 Thespian ( https://thespianpy.com/doc/ ),这是一个用于 Actor 模型的 Python 库,特别是我正在尝试使用“剧团”功能。据我了解,剧团装饰器充当调度程序来运行多个 Actor ,直到指定的 max_count ,每个 Actor 并行运行。剧团功能作为装饰器应用于我的 Actor 类:

@troupe(max_count = 4, idle_count = 2)
class Calculation(ActorTypeDispatcher):
def receiveMsg_CalcMsg(self, msg, sender):
self.send(sender, long_process(msg.index, msg.value, msg.status_cb))

我想在运行时而不是设计时配置 max_count。我承认我对装饰器的基础知识薄弱。

如何在运行时将值传递给 max_count?

我已经经历了这些,但我还是一头雾水:

Does python allow me to pass dynamic variables to a decorator at runtime?

http://simeonfranklin.com/blog/2012/jul/1/python-decorators-in-12-steps/

根据目前的答案,我尝试了这个,但是装饰器没有被应用(即它表现得好像没有装饰器)。我注释掉了类上方的@troupe 实现,该方法(包括变量)工作正常。这种方法不是:

# @troupe(max_count=cores, idle_count=2)
class Calculation(ActorTypeDispatcher):
def receiveMsg_CalcMsg(self, msg, sender):
self.send(sender, long_process(msg.index, msg.value, msg.status_cb))

def calculate(asys, calc_values, status_cb):
decorated_class = troupe(max_count=5, idle_count=2)(Calculation)
calc_actor = asys.createActor(decorated_class)

calculate 函数中还有其他内容,但这几乎只是一些簿记。

最佳答案

装饰器语法只是将函数应用于类的快捷方式。一旦知道 max_count 的值,您就可以自己调用该函数。

class Calculation(ActorTypeDispatcher):
...

# Time passes

c = input("Max count: ")
Calculation = troupe(max_count=int(c), idle_count=2)(Calculation)

(或者,在定义Calculation,如shown by @brunns 之前,简单地等到您确实c。)

关于python - 如何在 Python 中配置装饰器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55690952/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com