在我的项目中,我使用Worker来进行一些与事件相关的文件处理,并避免阻止其他事件的处理。 我需要的是能够在Worker完成时将事件(需要文件处理)置于备用状态(不需要其他组件进一步处理),然后继续处理序列。在
我不能在Worker完成时发出新事件,因为这可能会导致其他组件多次重新处理“相同”事件。在
是否有任何方法可以延迟(即暂停和恢复)事件传播以完成我需要的任务?有没有更好的方法来解决我的用例?在
附加说明:我无法避免阻塞行为,因为我需要使用一些外部(阻塞)库调用。在
编辑: 源代码示例:
from time import sleep
from circuits import Component, Debugger, handler, Event, Worker, task
class my_event(Event):
pass
def heavy_task():
print "heavy task"
sleep(3)
class NextHandler(Component):
@handler("my_event", priority=10)
def my_event(self, event):
print "Handler 2"
class Handler(Component):
_worker = Worker()
@handler("my_event", priority=20)
def my_event(self, event):
self.fire(task(heavy_task), self._worker)
print "Handler 1"
# how do I delay "event" until "heavy_task" is completed?
class App(Component):
h1 = Handler()
h2 = NextHandler()
def started(self, component):
print "Running"
self.fire(my_event())
if __name__ == '__main__':
(App() + Debugger()).run()
在本例中,我希望延迟“Handler”事件,以便“NextHandler”在“heavy\u task”完成工作之前不会接收它。在
根据您更新的问题和编辑;以下是您“等待”事件完成的方式:
示例:
输出:
^{pr2}$请参阅上面的评论。在
相关问题 更多 >
编程相关推荐