2016-07-06 46 views
1

我目前运行一个守护线程,抓住所有的单元格值,计算出,如果有一个变化,然后在一个循环中写出相关的细胞,即:Gspread - 更改听众?

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

这工作,但环获得,所有的呼叫都重要的I/O。

与其执行此操作,如果线程收到Google表格的更改通知,则会更加清晰。有没有办法做到这一点?

回答

0

只要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的范围之内,但我希望该文档可以帮助他人。

1

我转述的gspread GitHub的问题my comment

获得来自谷歌表变更通知是可能的应用脚本的installable triggers帮助。您可以在脚本编辑器中设置自定义功能,并为此功能分配触发事件。在此功能中,您可以使用UrlFetchApp.fetch获取外部网址。

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

此外,我还没有测试过非浏览器触发的更新。如果表格为这种类型的更新触发相同的事件,那么可能会出现无限循环的情况。