2010-07-24 4 views
0

Je suis désolé si mon titre est un peu flou. Fondamentalement, je veux imprimer un '.' chaque seconde pendant cinq secondes puis exécuter un morceau de code. Voici ce que j'ai essayé:Retarder l'exécution du code?

for iteration in range(5) : 
    timer = threading.Timer(1.0, print_dot) 
    timer.start() 
#Code chunk 

Il semble que cette temporisation commence son propre thread pour chaque instance, de sorte que les cinq minuteries vont tous très près de l'autre, plus le morceau de code exécute également trop tôt.

Répondre

0

Votre exemple fait la queue 5 minuteries et les tout commence (relativement) à la fois.

À la place, enchaînez les temporisateurs. Pseudo-code (car je sais à peine python):

iterationCount = 0 
function execute_chained_print_dot: 
    if iterationCount < 5 
    iterationCount = iterationCount + 1 
    timer = threading.Timer(1.0, execute_chained_print_dot) 
    timer.start() 
    print_dot() 
execute_chained_print_dot() 

Cela suppose que le python classe Timer se déclenche uniquement la méthode print_dot une fois. Si elle ne le fait pas, et tire à plusieurs reprises print_dot jusqu'à ce qu'il soit arrêté, puis le faire à la place:

iterationCount = 0 
timer = threading.Timer(1.0, execute_print_dot_until_finished) 
timer.start() 
function execute_print_dot_until_finished: 
    if iterationCount < 5 
    iterationCount = iterationCount + 1 
    print_dot() 
    else 
    timer.stop() 

Disclaimer: Je ne serai pas tenu responsable des erreurs dans ce code hors par un;)