Может выполнение операторов в Python быть отложенным?

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

Псевдокод:

print 1
wait(1 seconds)
print 2
wait(0.45 seconds)
print 3
wait(3 seconds)
print 4
15
задан Peter Mortensen 10 July 2016 в 15:39
поделиться

3 ответа

time.sleep (секунды)

import time

print 1
time.sleep(1)
print 2
time.sleep(0.45)
print 3
time.sleep(3)
print 4
46
ответ дан 30 November 2019 в 23:57
поделиться
import time

# ...

time.sleep(1)
5
ответ дан 30 November 2019 в 23:57
поделиться

Во всех ответах предполагалось, что вы хотите или можете вручную вставить 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

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

15
ответ дан 30 November 2019 в 23:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: