Python 动态事件条件

Python 动态事件条件,python,algorithm,events,asynchronous,Python,Algorithm,Events,Asynchronous,假设我们有一个名为Foo的类,它在准备就绪时触发“ready”事件 from observer import SubjectSet class Foo: def __init__(self): self.events = SubjectSet() self.events.create('ready') def do_sth(self): self.events.fire('ready') 正如您所看到的,do_sth方法生成了Foo类的现成实例。但子类将希望

假设我们有一个名为Foo的类,它在准备就绪时触发“ready”事件

from observer import SubjectSet

class Foo:
  def __init__(self):
    self.events = SubjectSet()
    self.events.create('ready')

  def do_sth(self):
    self.events.fire('ready')
正如您所看到的,do_sth方法生成了Foo类的现成实例。但子类将希望添加新的任务/条件,这些任务/条件必须在emit ready事件之前完成

为了解决这个问题,我编写了一组名为TaskPool、Task、ObserverTask的新类。Foo类正在使用它们,如下所示:

from observer import SubjectSet
from taskpool import TaskPool, ObserverTask

class Foo:
  def __init__(self):
    self.events = SubjectSet()
    self.events.create('task1')
    self.events.create('task2')
    self.events.create('ready')

    task1 = ObserverTask( self.events.get('task1') )
    task1 = ObserverTask( self.events.get('task2') )

    self.tasks = TaskPool()
    self.tasks.append( task1, task2 )

    self.tasks.events.add_listener('success',self.events.subjects.ready.emit)

 def complete_task1(self):
   self.events.fire('task1')

 def complete_task2(self):
   self.events.fire('task2')
现在,当taskpool触发“成功”事件时,它触发“就绪”事件。正如您所期望的,将扩展Foo的类可以定义在触发ready事件之前必须完成的新任务。顺便说一下,几乎所有的任务都是异步的

你认为这是解决问题的好办法吗?我一直在寻找更好的解决方案,但我想我不知道正确的搜索短语


谢谢。

我认为你实际上并没有非常准确地定义你试图解决的问题。然而,这个解决方案没有错。它显然是异步和事件驱动的。但我认为,通常情况下,解决方案还应该针对错误条件,即如果task1或task2由于任何原因失败,会发生什么情况——他们可能还可以发送一个“失败”事件,然后这也应该通过一些逻辑从Foo中传播出去——即如果task1失败,task2是否仍会运行到完成,或者是否会被中止;如果task1成功而task2失败,主对象会报告“成功”或“失败”还是什么?只是要考虑的事情。

< P>我认为你并没有确切地定义你试图解决的问题。然而,这个解决方案没有错。它显然是异步和事件驱动的。但我认为,通常情况下,解决方案还应该针对错误条件,即如果task1或task2由于任何原因失败,会发生什么情况——他们可能还可以发送一个“失败”事件,然后这也应该通过一些逻辑从Foo中传播出去——即如果task1失败,task2是否仍会运行到完成,或者是否会被中止;如果task1成功而task2失败,主对象会报告“成功”或“失败”还是什么?只是要考虑的事情。