from pydispatch import dispatcher
from typing import Dict, List
import time
# 定义信号
class Signals:
TASK_STARTED = 'task_started'
TASK_COMPLETED = 'task_completed'
TASK_ERROR = 'task_error'
# 任务管理器
class TaskManager:
def __init__(self):
self.tasks: Dict[str, List] = {}
self._setup_signals()
def _setup_signals(self):
# 连接信号处理器
dispatcher.connect(self._on_task_started, signal=Signals.TASK_STARTED)
dispatcher.connect(self._on_task_completed, signal=Signals.TASK_COMPLETED)
dispatcher.connect(self._on_task_error, signal=Signals.TASK_ERROR)
def _on_task_started(self, sender, task_id, **kwargs):
print(f"任务 {task_id} 开始执行")
self.tasks[task_id] = {'status': 'running', 'start_time': time.time()}
def _on_task_completed(self, sender, task_id, result, **kwargs):
print(f"任务 {task_id} 完成,结果: {result}")
self.tasks[task_id].update({
'status': 'completed',
'end_time': time.time(),
'result': result
})
def _on_task_error(self, sender, task_id, error, **kwargs):
print(f"任务 {task_id} 出错: {error}")
self.tasks[task_id].update({
'status': 'error',
'end_time': time.time(),
'error': str(error)
})
# 任务执行器
class TaskExecutor:
def __init__(self, task_id: str):
self.task_id = task_id
def execute(self):
# 发送任务开始信号
print('start>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
dispatcher.send(
signal=Signals.TASK_STARTED,
sender=self,
task_id=self.task_id
)
try:
# 模拟任务执行
time.sleep(2)
result = f"Task {self.task_id} result"
print('cccccccccccccccc>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>')
# 发送任务完成信号
dispatcher.send(
signal=Signals.TASK_COMPLETED,
sender=self,
task_id=self.task_id,
result=result
)
except Exception as e:
# 发送任务错误信号
dispatcher.send(
signal=Signals.TASK_ERROR,
sender=self,
task_id=self.task_id,
error=e
)
# 使用示例
def main():
# 创建任务管理器
manager = TaskManager()
# 创建并执行任务
task1 = TaskExecutor("task1")
task2 = TaskExecutor("task2")
# 执行任务
task1.execute()
task2.execute()
# 查看任务状态
print("\n任务状态:")
for task_id, task_info in manager.tasks.items():
print(f"{task_id}: {task_info}")
if __name__ == "__main__":
main()
from pydispatch import dispatcher
from pydispatch.robustapply import robustApply
# 1. 定义信号处理器
def handler1(sender, **kwargs):
print(f"Handler 1: 收到来自 {sender} 的信号")
return "Handler 1 的响应"
def handler2(sender, data, **kwargs):
print(f"Handler 2: 收到数据 {data}")
return "Handler 2 的响应"
# 2. 连接信号处理器
dispatcher.connect(handler1, signal="test_signal")
dispatcher.connect(handler2, signal="test_signal")
# 3. 使用 send 发送信号
print("\n使用 send 发送信号:")
responses = dispatcher.send(signal="test_signal", sender="sender1", data="test_data")
print("Send 响应:", responses)
# 4. 使用 robustApply 直接调用处理器
print("\n使用 robustApply 调用处理器:")
result1 = robustApply(handler1, signal="test_signal", sender="sender1", data="test_data")
result2 = robustApply(handler2, signal="test_signal", sender="sender1", data="test_data")
print("robustApply 响应:", result1, result2)