Gspread - 改变倾听者?

时间:2016-07-06 13:54:50

标签: python gspread

我目前运行一个守护程序线程,它抓取所有单元格值,计算是否有变化,然后在循环中写出依赖单元格,即:

def f():
    while not event.is_set():
        update()
        event.wait(15)
Thread(target=f).start()

这样可行,但循环get-all调用是重要的I / O.

如果通过Google表格向线程通知了更改,那么这样做会更加清晰。有没有办法做到这一点?

2 个答案:

答案 0 :(得分:1)

我在gspread GitHub的问题上重述了my comment

借助Apps脚本中的installable triggers,您可以从Google表格获取更改通知。您可以在脚本编辑器中设置自定义功能,并为此功能分配触发事件。在此功能中,您可以使用UrlFetchApp.fetch获取外部网址。

在收听端(您的网络服务器),您将拥有此网址的处理程序。这个处理程序将完成这项工作。根据服务器配置(许多线程或进程),确保避免可能的竞争条件。

另外,我还没有测试非浏览器触发的更新。如果Sheets为这种类型的更新触发相同的事件,则可能存在无限循环的情况。

答案 1 :(得分:0)

每当Google表格检测到更改时,我就可以通过触发HTTP请求来实现此目的。

在Google表格上:

***

Python-side(w / Tornado)

function onEdit (e) {
  UrlFetchApp.fetch("http://myaddress.com");
}

我不认为这种功能应该在gspread的范围内,但我希望文档可以帮助其他人。