【问题标题】:Start method on thread fails with TypeError线程上的启动方法因 TypeError 而失败
【发布时间】:2013-12-29 14:58:40
【问题描述】:

我收到以下错误

错误:

tt.start()

TypeError: 'int' object is not callable

我将 threading.Thread 子类化为简单地跟踪时间,当经过的时间与传入的任意值匹配时,它会将匹配键的值从输入字典添加到队列中。另一个线程将定期检查队列以查找工作并在找到时进行处理。

这是引发错误的代码:

class TimerQueue(threading.Thread):

    def __init__(self, qyoo, kwargs):
        threading.Thread.__init__(self)
        self.queue = qyoo
        self.work = kwargs
        self.start = ceiling(time.time())
        self.times = kwargs.keys()


    def run(self):
        while True:
            for t in self.times:
                if ceiling(time.time()) - self.start == t:
                    logger.debug("adding {} to the queue".format(self.work[t]))
                    self.queue.put(self.work[t])
            time.sleep(1)

if __name__ == "__main__":
    input_queue = queue.Queue()
    tt = TimerQueue(input_queue, time_url_dict)
    tt.start()

为什么我在调用 start 时收到错误消息?这是在运行 Windows 7 的 Python 3.3.3 中。

【问题讨论】:

    标签: python windows multithreading python-3.x python-3.3


    【解决方案1】:

    在以下行中,代码用int 对象(ceiling 的返回值)覆盖了tt.start 方法。

    self.start = ceiling(time.time())
    

    将self.start重命名为其他名称,例如self.start_time,以避免被覆盖。

    【讨论】:

    • 我完全是个傻瓜,感谢您指出我明显的蹩脚错误。干杯!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-16
    • 2013-02-19
    • 1970-01-01
    • 2012-05-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多