Search code examples
pythonwindowsmultithreadingpython-3.xpython-3.3

Start method on thread fails with TypeError


I receive the following error

ERROR:

tt.start()

TypeError: 'int' object is not callable

I subclassed threading.Thread to simply keep track of time and when elapsed time matches some arbitrary value passed in, it would add the value of the matching key from the input dictionary to a queue. Another thread will periodically check the queue looking for work and process as it finds any.

Here's the code that throws the error:

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()

Why am I received the error when calling start? This is in Python 3.3.3 running Windows 7.


Solution

  • In the following line, the code overwrites tt.start methdo with int object (the return value of the ceiling).

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

    Rename self.start with other name, such as self.start_time to avoid the overwriting.