【问题标题】:Python control flow issue : function callsPython 控制流问题:函数调用
【发布时间】:2016-05-03 06:21:24
【问题描述】:

下面是我的python代码的控制流程:

from BB import B
def A(param):
    ...
    ...
    //This takes a while to complete execution
    ...
    B()
print something
A(param) //Function call

这里的问题是函数 B 在 A 完成执行之前被调用。 A 创建并写入文件,而 B 从文件中读取并执行一些操作。在 A 完成后调用 B 非常重要。

我试过这个,但它不能解决问题。

from BB import B
def A(param):
    ...
    ...
    //This takes a while to complete execution
    ...
print something
A(param) //Function call
B()

【问题讨论】:

标签: python


【解决方案1】:

听起来您需要对A 进行阻塞调用——即在进程完成之前避免返回。如果它正在写入文件,您可能会考虑以下事项:

import os

from time import sleep

def A(param):

    filepath = "/path/to/output/file"
    ... do stuff ...
    while not os.path.exists(filepath):
        sleep(5)
    B()

但是,作为@Joze cmets,您可能只想出于一般组合原因而使用回调策略。

【讨论】:

  • 阻塞调用没有帮助,并且由于某些文件打开/关闭问题,我得到了一个值错误。我无法弄清楚如何以及在何处包含回调策略。
  • @RowenaRavenclaw,听起来您的代码中写入文件的部分存在问题。我建议分享那个 sn-p。
  • 谢谢!该文件实际上是通过重定向控制台的输出来编写的。然后我 ssh 到另一台服务器,在那里我做一些事情,而控制台上的“打印”语句被重定向到这个文件。在我 ssh 到的另一台服务器上,我读写其他一些文件。
  • 那么听起来您的代码正在尝试访问正在写入的文件。在这种情况下,您需要一种方法来轮询文件的状态。这是在代码中依赖副作用的烦人之处。有什么方法可以重写代码以使用 python 编写文件而不是操作标准输出?否则,如果您知道写入此文件所需的时间有一个最大值,那么就睡那么久。
  • 我 ssh 到服务器并运行脚本。所以为了捕获日志,我不得不重定向标准输出。如果我执行任何其他文件操作,它会被写入我 ssh 进入的服务器上的文件中......
【解决方案2】:

暴力破解,你可以在 B() 读取之前放置一个计时器。 进口时间 time.sleep(5) # 延迟 5 秒

或将 5 秒调整为您期望仍能工作的最短时间

【讨论】:

    猜你喜欢
    • 2011-12-29
    • 2011-03-04
    • 2016-03-29
    • 1970-01-01
    • 2015-04-11
    • 2011-12-19
    • 1970-01-01
    • 1970-01-01
    • 2010-09-23
    相关资源
    最近更新 更多