我目前运行一个守护线程,抓住所有的单元格值,计算出,如果有一个变化,然后在一个循环中写出相关的细胞,即:Gspread - 更改听众?
def f():
while not event.is_set():
update()
event.wait(15)
Thread(target=f).start()
这工作,但环获得,所有的呼叫都重要的I/O。
与其执行此操作,如果线程收到Google表格的更改通知,则会更加清晰。有没有办法做到这一点?
我目前运行一个守护线程,抓住所有的单元格值,计算出,如果有一个变化,然后在一个循环中写出相关的细胞,即:Gspread - 更改听众?
def f():
while not event.is_set():
update()
event.wait(15)
Thread(target=f).start()
这工作,但环获得,所有的呼叫都重要的I/O。
与其执行此操作,如果线程收到Google表格的更改通知,则会更加清晰。有没有办法做到这一点?
只要Google表格检测到更改,我就可以通过触发HTTP请求来实现此功能。
在谷歌表:
function onEdit (e) {
UrlFetchApp.fetch("http://myaddress.com");
}
Python的侧(W /龙卷风)
import tornado.ioloop
import tornado.web
class MainHandler(tornado.web.RequestHandler):
def get(self):
on_edit()
self.write('Updating.')
def on_edit():
# Code here
pass
app = tornado.web.Application([(r'/', MainHandler)])
app.listen(#port here)
tornado.ioloop.IOLoop.current().start()
,我不认为这种功能应该是gspread的范围之内,但我希望该文档可以帮助他人。
我转述的gspread GitHub的问题my comment:
获得来自谷歌表变更通知是可能的应用脚本的installable triggers帮助。您可以在脚本编辑器中设置自定义功能,并为此功能分配触发事件。在此功能中,您可以使用UrlFetchApp.fetch获取外部网址。
在侦听端(您的Web服务器),您将拥有该URL的处理程序。这个处理程序将完成这项工作。根据服务器配置(许多线程或进程),确保避免可能的竞争条件。
此外,我还没有测试过非浏览器触发的更新。如果表格为这种类型的更新触发相同的事件,那么可能会出现无限循环的情况。