timers not canceling!

Discussion in 'Python' started by Alex Hall, Mar 24, 2010.

  1. Alex Hall

    Alex Hall Guest

    Hi all,
    I am having trouble with a timer I am trying to use. It is the same
    timer, but I need to cancel it when a certain event happens, then
    start it again when a second event happens. The below is from a shell
    session, not a file, but it shows my problem: I call cancel on a
    timer, then call start on it, and it thinks it is already running?
    What am I missing?

    >>> from threading import Timer
    >>> def func():

    .... print("Time up!")
    ....
    >>> t=Timer(10.0, func)
    >>> t.start()
    >>> t.cancel()
    >>> t.start()

    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    File "C:\python26\lib\threading.py", line 465, in start
    raise RuntimeError("thread already started")
    RuntimeError: thread already started
    >>>


    I typed start, then typed cancel within ten seconds (probably four or
    five), then called start again a couple seconds later. I figured
    canceling the timer would kill the thread so I could start it again. I
    am not looking for a reset, since I do not want it counting always.
    Thanks.
    --
    Have a great day,
    Alex (msg sent from GMail website)
    ; http://www.facebook.com/mehgcap
     
    Alex Hall, Mar 24, 2010
    #1
    1. Advertising

  2. On Wed, 24 Mar 2010 17:12:45 -0400, Alex Hall wrote:

    > Hi all,
    > I am having trouble with a timer I am trying to use. It is the same
    > timer, but I need to cancel it when a certain event happens, then start
    > it again when a second event happens. The below is from a shell session,
    > not a file, but it shows my problem: I call cancel on a timer, then call
    > start on it, and it thinks it is already running? What am I missing?
    >
    >>>> from threading import Timer
    >>>> def func():

    > ... print("Time up!")
    > ...
    >>>> t=Timer(10.0, func)
    >>>> t.start()
    >>>> t.cancel()
    >>>> t.start()

    > Traceback (most recent call last):
    > File "<stdin>", line 1, in <module>
    > File "C:\python26\lib\threading.py", line 465, in start
    > raise RuntimeError("thread already started")
    > RuntimeError: thread already started



    The start method is to start generic threads, not just timers, and
    threads don't support being restarted.

    Timers are fairly simple objects: after you start the thread, they just
    wait until the time expires, then run a function. You can cancel them,
    but not pause and restart them.

    To do what you are trying to do, you will need to subclass either Timer
    or thread and implement your own logic for pausing or restarting the
    count down.


    > I typed start, then typed cancel within ten seconds (probably four or
    > five), then called start again a couple seconds later. I figured
    > canceling the timer would kill the thread so I could start it again.



    That's not how they work. "start" means "start the thread", not "start
    the timer", and threads cannot be restarted.

    The documentation is very clear:

    "start()
    Start the thread’s activity.

    It must be called at most once per thread object. It arranges for the
    object’s run() method to be invoked in a separate thread of control."

    http://docs.python.org/library/threading.html#thread-objects


    --
    Steven
     
    Steven D'Aprano, Mar 24, 2010
    #2
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Replies:
    1
    Views:
    1,685
    Steve C. Orr [MVP, MCSD]
    Feb 22, 2005
  2. AT

    Canceling Page.Load event

    AT, Aug 18, 2005, in forum: ASP .Net
    Replies:
    1
    Views:
    426
    Rick Strahl [MVP]
    Aug 19, 2005
  3. DazedAndConfused

    Canceling Subsequent events from page_load

    DazedAndConfused, Sep 22, 2005, in forum: ASP .Net
    Replies:
    4
    Views:
    553
    DazedAndConfused
    Sep 23, 2005
  4. Replies:
    0
    Views:
    398
  5. Tony
    Replies:
    7
    Views:
    355
Loading...

Share This Page