循环中的导入模块

时间:2015-07-02 01:06:00

标签: python python-2.7

我有一个文件,我们称之为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是否会被缓存,并避免在后续运行时触发?如果是,我还可以在循环脚本中重复调用该代码吗?我应该把它包括在内吗?

感谢您的任何提示!

2 个答案:

答案 0 :(得分:4)

如果您有foo.py的访问权限,则应该在函数中包装要在foo.py中运行的任何内容。然后,只需导入foo一次,然后在循环中调用函数foo.func()

有关重复导入未运行文件中代码的原因,请参阅this

答案 1 :(得分:2)

您可以将import foo替换为

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

不太确定,但这应该有效。 编辑:现在我确定。