我目前運行一個守護線程,抓住所有的單元格值,計算出,如果有一個變化,然後在一個循環中寫出相關的細胞,即: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的處理程序。這個處理程序將完成這項工作。根據服務器配置(許多線程或進程),確保避免可能的競爭條件。
此外,我還沒有測試過非瀏覽器觸發的更新。如果表格爲這種類型的更新觸發相同的事件,那麼可能會出現無限循環的情況。