2015-07-02 6 views
2

У меня есть один файл, назовем его foo.py. Он выполняет несколько функций, включая отправку некоторых данных через последовательный порт и отправку ответа на ответ.модуль импорта в цикле

У меня есть еще один файл, который выглядит примерно так:

iteration = 0 
while True: 
    iteration += 1 
    // do some stuff here every time 
    if iteration%5 == 0: 
     import foo 
    time.sleep (100) 

Я знаю, есть некоторые более широкие проблемы здесь с изяществом (или его отсутствие) независимого счетчика, но положить, что в сторону - серийная передача/электронная почта работает только при первом запуске. Последующие циклы с кратным 5 (которые будут вызывать по модулю 5 == 0) ничего не предпринимают.

Является ли импортированная вами версия foo.py кэшированной и не запускается при последующих запусках? Если да, как еще я могу называть этот код многократно из моего цикла? Должен ли я просто включить его в строку?

Спасибо за любые советы!

+3

Вы можете объяснить, почему вы хотите импортировать его более одного раза? –

+3

В принципе. Поместите свой код из 'foo' в функцию, ваш импорт в начале файла и вызовите' foo.name_of_function() ' – NightShadeQueen

+0

Спасибо за вопрос VenomFangs. NightShadeQueen верен - это всего лишь блок кода, который я хотел повторить несколько раз. Для него больше смысла жить в функции. –

ответ

3

Если у вас есть доступ к foo.py, вы должны обернуть все, что хотите, в foo.py в функции. Затем просто импортируйте foo и вызовите функцию foo.func() в цикле.

См. this, чтобы узнать, почему повторный импорт не запускает код в файле.

+0

О, конечно, это имеет смысл. Спасибо! –

1

Вы можете заменить import foo с

if 'foo' in dir(): # if it has already been imported 
    reload(foo) 
else: 
    import foo 

Не совсем уверен, но это должно работать. Редактировать: Теперь я уверен.

+2

Да, он должен работать, но ___please___ не делает этого. Функция 'reload()' действительно должна использоваться только во время разработки, когда вы работаете в интерактивном интерпретаторе, и вам нужно перезагрузить модуль, который вы изменили. См. [Документы для перезагрузки()] (https://docs.python.org/2/library/functions.html#reload). Обратите внимание, что в Python 3 'reload()' является _not_ встроенным, вам нужно импортировать его с [imp] (https://docs.python.org/3/library/imp.html#imp.reload) или [importlib] (https://docs.python.org/3/library/importlib.html#importlib.reload). –

+0

@ PM2Ring Да, вы правы, но я действительно думаю, что OP это знает. – koffein

+0

Отлично, спасибо. Я не знал, что это вариант, и это хорошо знать :) –

Смежные вопросы