Код: Выделить всё
import time
def sleep(seconds):
start_time = time.time()
while time.time() - start_time < seconds:
yield
def task1():
while True:
print('Task 1')
yield from sleep(3)
event_loop = [task1()]
while True:
for task in event_loop:
next(task)
Итак, я вижу следующее: запускается Task1(), печатает «Задачу 1», затем выходит из режима сна (3), что означает, что генератор спит (3) работает с самого начала до StopIteration. Я ожидал следующего: запускается задача 1(), печатает «Задачу 1», а затем переходит из режима сна (3), что означает, что сон() проверяет свое временное условие, понимает, что 3 секунды еще не прошло, и возвращает управление обратно в задачу 1(), которая возвращает элемент управления в цикл for. Цикл for снова вызывает Task1(), Task1() печатает «Задачу 1» и переходит из режима сна(3), который снова проверяет время, понимает, что 3 секунды еще не прошло и так далее...
Итак, вопрос в том, прав ли я, когда понимаю это так: выход из сна(3) вызывает генератор сна() таким образом, когда он не доходит до следующего выход и возвращает управление задаче Task1(), но ОстановитьИтерацию?
Подробнее здесь: https://stackoverflow.com/questions/792 ... ally-works
Мобильная версия