2016-07-06 66 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的處理程序。這個處理程序將完成這項工作。根據服務器配置(許多線程或進程),確保避免可能的競爭條件。

此外,我還沒有測試過非瀏覽器觸發的更新。如果表格爲這種類型的更新觸發相同的事件,那麼可能會出現無限循環的情況。