Может ли выполнение операторов в Python быть отложено? - PullRequest
14 голосов
/ 25 июля 2010

Я хочу запустить первую строку print 1 , затем подождать 1 секунду для запуска второй команды print 2 и т. Д.

Псевдокод:

print 1
wait(1 seconds)
print 2
wait(0.45 seconds)
print 3
wait(3 seconds)
print 4

Ответы [ 3 ]

44 голосов
/ 25 июля 2010

time.sleep(seconds)

import time

print 1
time.sleep(1)
print 2
time.sleep(0.45)
print 3
time.sleep(3)
print 4
15 голосов
/ 25 июля 2010

Все ответы предполагают, что вы хотите или можете вручную вставлять time.sleep после каждой строки, но, возможно, вам нужен автоматический способ сделать это для большого количества строк кода, например, рассмотрите этот код

def func1():
    print "func1 1",time.time()
    print "func1 2",time.time()

def func2():
    print "func2 1",time.time()
    print "func2 2",time.time()

def main():
    print 1,time.time()
    print 2,time.time()
    func1()
    func2()

Если вы хотите отложить выполнение каждой строки, либо вы можете вручную вставить time.sleep перед каждой строкой, которая является громоздкой и подверженной ошибкам, вместо этого вы можете использовать sys.settrace, чтобы вызвать собственную функцию, вызываемую перед каждой строкой.выполняется и в этом обратном вызове вы можете задержать выполнение, поэтому, не вставляя вручную time.sleep в каждое место и не засоряя код, вы можете сделать это вместо

import sys
import time

def func1():
    print "func1 1",time.time()
    print "func1 2",time.time()

def func2():
    print "func2 1",time.time()
    print "func2 2",time.time()

def main():
    print 1,time.time()
    print 2,time.time()
    func1()
    func2()

def mytrace(frame, event, arg):
    if event == "line":
        time.sleep(1)
    return mytrace

sys.settrace(mytrace)
main()

Без вывода трассировки:

1 1280032100.88
2 1280032100.88
func1 1 1280032100.88
func1 2 1280032100.88
func2 1 1280032100.88
func2 2 1280032100.88

С выводом трассировки это:

1 1280032131.27
2 1280032132.27
func1 1 1280032134.27
func1 2 1280032135.27
func2 1 1280032137.27
func2 2 1280032138.27

Вы можете дополнительно настроить его в соответствии с вашими потребностями, возможно, также проверять содержимое строки, и что наиболее важно, это очень легко отключить и будет работать с любым кодом.

5 голосов
/ 25 июля 2010
import time

# ...

time.sleep(1)
...