Andrise programmeerimisalane WIKI

Tegumid

Tegumid on väiksed ülesanded, mis antakse serverile täitmiseks. Sisuliselt on tegu midagi perioodiliste tööde laadsega, selle vahega et kui perioodilisi töid tehakse perioodiliselt, siis tegumid käivitatakse nii kiiresti, kui hetke võimalused lubavad. Mõlemal juhul teeb server kindlaksmääratud skripti vastu päringu, mis selle skripti käivitab.

Näiteks saab ühe suure töö jagada mitmeks väikeseks tööks ja need ükshaaval tegumitena serverile ette anda. Kohe kui serveril on vaba ressursse tööde tegemiseks, hakkab ta neid tegumeid ükshaaval täitma. Nii et kui perioodilised tööd käivitatakse määratud perioodi tagant, siis tegumid käivitatakse võimalikult väikese perioodi tagant ja seda niikaua kuni tegumid otsa saavad.

Üks teine erinevus veel perioodiliste töödega seinseb faktis, et kui perioodilise töö puhul tehakse skriptile GET päring, siis tegumi puhul tehakse POST päring. See võimaldab tegumile ette anda suuremas mahus parameetreid, kuna GET parameetrite mahtudel on suhteliselt väikesed limiidid.

Tegumite kasutamiseks tuleb sisse laadida teek taskqueue. NB Kuna teek asub api.labs paketis ja tegu on eksperimentaalse (lõplikult väljakujunemata) funktsionaalsusega, siis tulevikus muutub teegi aadress ja võivad (aga ei pea) muutuda ka teegi funktsioonid.

from google.appengine.api.labs import taskqueue

Tegumi väljakutsumine

Tegumi väljakutsumiseks tuleb käivitada taskqueue.add funktsioon, mis määrab ära tegumi andmed ja lisab selle järjekorda.

taskqueue.add(url='/tegum', params={'key': key})

Antud rida lisab järjekorda tegumi, mis teeb päringu aadressile /tegum/ POST parameetriga key. Tegum läheb järjekorras täitmisele koheselt peale väljakutsumist (kui järjekorras muid tegumeid pole, siis kohe, aga muidu millalgi hiljem). Arvestada tuleb, et tegumite täitmise järjekord ei ole garanteeritud. st. et täitmised võivad toimuda teises järjekorras kui need defineeriti. Järjekorra ajab sassi näiteks kui mõni tegum ebaõnnestub - sellisel juhul proovitakse veidi aja pärast seda uuesti käivitada, kuid vahepealseks ajaks järjekord seisma ei jää.

Tegumi deklareerimine

Tegum tuleb deklareerida tavalise päringuklassina, arvestada tuleb ainult, et tegum peaks olema võimalikult kiire ja väikesemahuline, selle käivitamine ei tohiks võtta soovituslikult rohkem kui 1 sekundi.

class Tegum(webapp.RequestHandler):
  def post(self):
    key = self.request.get('key')
    tee_midagi(key)

Antud näites võtab tegum vastu POST parameetrina saadud key väärtuse ja teeb sellega midagi.