【问题标题】:Acessing a variable being updated访问正在更新的变量
【发布时间】:2017-11-13 19:27:16
【问题描述】:

我有一个监视 csv 文件的函数。它遍历 csv 文件中的所有行并返回每一行,等待文件更新,如果是,则返回该新值。看起来是这样的:

def follow():
    file_path = filedialog.askopenfilename()
    with open(file_path) as csvDataFile:
        csvReader = csv.reader(csvDataFile)
        csvDataFile.seek(0,0)
        while True:
            line = csvDataFile.readline()
            if not line:
                time.sleep(0.5)
                continue
            yield line

我这样做是为了一个 gui。我有一个按钮,按下时会加载 csv 文件并调用此函数。它将每一行保存到一个成员变量列表中。

def browseForFile(self):
        line = pull_csv_data.follow()
        for item in line:
            self.list.append(item)

当按下另一个按钮时,它会遍历该列表并在 gui 上显示信息:

def listItems(self):
    for i in self.list:
        time.sleep(0.1)
        item = QListWidgetItem(i)
        self.prev_scenes.addItem(item)

问题是,每当我单击按钮以在列表中显示数据时,它都会停止响应,直到我终止具有 follow() 函数的 python 脚本。为澄清起见,follow 函数位于我的“主”文件中的单独文件中。

基本上.. follow 函数不允许其他进程同时运行,我认为。真的吗?有解决方法吗?或者有更好的方法吗?

【问题讨论】:

  • 粘贴正确缩进的代码,用鼠标滑动并使用 Ctl-k 或{} 工具将其标记为预格式化代码。
  • 显示调用follow()的代码。
  • 你为什么不用csvReader
  • 不需要csvDataFile.seek(0, 0)。当你打开一个文件进行阅读时,你默认在文件的开头。
  • 如果你想同时运行多个东西,你需要使用线程。

标签: python csv


【解决方案1】:

follow 函数与您的 main 函数在同一个过程中。因此,当您的跟随功能休眠时,您的整个程序也会休眠。如果您希望它异步运行,则必须明确地这样做。

您可能应该使用https://pythonhosted.org/watchdog/index.htmlhttps://github.com/seb-m/pyinotify/wiki 之类的东西,而不是尝试编写自己的文件处理函数。

【讨论】:

  • 如何获取 inotify 以检测文件是否已更新?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多