if __name__ == '__main__':

    last = [time.time()]
    def tprint(*args):
        print(threading.current_thread().name + '\t(sleep ' +
              str(time.time() - last[0])[:5] +
              ' seconds)\t' + ' '.join(args))
        last[0] = time.time()

    print("""Expected output:
    Thread-1 (sleep 0 s) started
    Thread-3 (sleep 1 s) a
    Thread-5 (sleep 1 s) a
    Thread-7 (sleep 1 s) a
    Thread-9 (sleep 1 s) a
    """)
    def w():
        tprint('started')
        b = None
        i = [0]
        def a():
            tprint('a')
            time.sleep(0.5)
            if i[0] < 3:
                i[0] += 1
            else:
                clear_interval(b)
        b = set_interval(a, 1)
    run(w)
    """)
    def w():
        tprint('started')
        def on_message(message):
            tprint('w message: ' + message)
        on("message", on_message)
        b = None
        i = [0]
        def a():
            tprint('a')
            time.sleep(0.5)
            post_message('hi from w again!')
            if i[0] < 3:
                i[0] += 1
            else:
                clear_interval(b)
        b = set_interval(a, 1)
        time.sleep(0.05)
        post_message('hi from w!')
    def main():
        wor = worker(w)
        def on_message(message):
            tprint('main message: ' + message)
        wor.on("message", on_message)
        time.sleep(0.2)
        wor.post_message('hello from main!')
        time.sleep(0.5)
        wor.post_message('hello from main again!')
        time.sleep(0.1)
    run(main)