Да, это нормальное поведение. Вы в основном читаете в конце файла в первый раз (вы можете сортировать его как чтение ленты), поэтому вы не можете читать больше, если вы не сбросите его, либо используя f.seek(0)
, чтобы переместить на начало файла или закрыть его, а затем снова открыть его, который начнется с начала файла.
Если вы предпочитаете, вместо этого вы можете использовать синтаксис with
, который автоматически закроет файл для вы
, например,
with open('baby1990.html', 'rU') as f:
for line in f:
print line
после завершения этого блока, файл автоматически закрыт для вас, поэтому вы можете выполнять этот блок несколько раз, не закрывая явным образом файл самостоятельно и прочитайте этот файл снова.
Прежде всего: это отличный вопрос, мне интересно, почему он до сих пор не обсуждался широко
Я могу вспомнить два возможных подхода
[ 1132] Фьюзинг Operators
: Как указано в @Kris , Объединение Operators
вместе появляется быть наиболее очевидным обходным путем
Отдельный Верхний уровень DAG
с : Читать ниже
Подход с использованием отдельных групп DAG верхнего уровня
Учитывая
(Возможно) Идея : Если вы чувствуете себя предприимчивым
DAG
с, скажем, DAG-A & amp; DAG-B TriggerDagRunOperator
ExternalTaskSensor
после TriggerDagRunOperator
[ 1155] BranchPythonOperator
после Задачи-B с trigger_rule=all_done
BranchPythonOperator
должен перейти в другой TriggerDagRunOperator
, который затем вызывает DAG-A (снова!) Полезные ссылки
EDIT-1
Вот гораздо более простой способ, который может обеспечить подобное поведение