如何使工人可重入?

2024-10-01 02:31:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我怎样才能从一个工人中呼叫一个工人?这似乎是我试图解决的难题的一个简单表示:

import time
from circuits import BaseComponent, Worker, Debugger, task, handler

class App(BaseComponent):
    def factorial(self, n):
        time.sleep(1)
        if n > 1:
            nn = yield self.call(task(self.factorial, n-1))
            return n * nn.value
        else:
            return 1

    @handler("started")
    def started(self, *args):
        Worker().register(self)
        rv = yield self.call(task(self.factorial, 5))
        print(rv.value)
        self.stop()

(App() + Debugger()).run()

以下是错误输出:

ERROR  (<task[*] (<bound method App.factorial of <App/* 26821:MainThread (queued=1) [R]>>, 5 )>) (<class 'AttributeError'>): AttributeError("'generator' object has no attribute 'task_event'",)
Traceback (most recent call last):
  File "/usr/lib/python3.4/site-packages/circuits/core/manager.py", line 841, in processTask
    task_state.task_event = event
AttributeError: 'generator' object has no attribute 'task_event'

它也不会因为在stop()调用之前失败而终止。你知道吗


Tags: importselfeventapptasktimecalldebugger