我正在尝试使用 Thespian (https://thespianpy.com/doc/ https://thespianpy.com/doc/),一个用于演员模型的 Python 库,特别是我正在尝试使用“剧团”功能。据我了解,剧团装饰器充当调度程序,运行多个演员直至指定的 max_count,每个演员并行运行。剧团功能作为装饰器应用在我的演员类上:
@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?
我已经经历过这些,但我仍然处于黑暗之中:
python 是否允许我在运行时将动态变量传递给装饰器? https://stackoverflow.com/questions/37789212/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/ 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
功能,但这几乎只是一些簿记。