select — odota tapahtumia joukossa virtoja¶
Tämä moduuli tarjoaa funktioita, joilla odotetaan tehokkaasti, kunnes yksi tai useampi virta (tiedostomainen olio, joka toteuttaa virtaprotokollan, kuten soketit, UART:t ja muut I/O-oliot) on valmis luettavaksi tai kirjoitettavaksi, sen sijaan että odotettaisiin kiireisesti tai estettäisiin suoritus yksittäisellä oliolla.
poll-olio on suositeltu rajapinta: se skaalautuu monille virroille ja on allokoinniton, kun sitä käytetään funktion poll.ipoll() kautta. Moduulitason funktio select() on vähemmän tehokas yhteensopivuusrajapinta.
Esimerkki poll-oliota käyttäen:
import select
poller = select.poll()
poller.register(uart, select.POLLIN)
while True:
# Wait up to 1000 ms for the UART to have data.
for obj, event in poller.poll(1000):
if event & select.POLLIN:
print(obj.read())
Esimerkki moduulitason funktiota select() käyttäen:
import select
# Wait up to 1 second for the socket to become readable.
rlist, wlist, xlist = select.select([sock], [], [], 1.0)
if rlist:
data = sock.recv(100)
Funktiot¶
- select.select(rlist: List, wlist: List, xlist: List, timeout: float | None = None) Tuple[List, List, List]¶
Odota, kunnes yksi tai useampi annetuista virtaolioista on valmis, tai kunnes timeout umpeutuu.
rlist on lista olioita, joiden luettavuutta valvotaan.
wlist on lista olioita, joiden kirjoitettavuutta valvotaan.
xlist on lista olioita, joiden virhe- tai katkostilaa valvotaan.
timeout on enimmäisaika, jonka odotetaan, sekunteina (liukuluku hyväksytään). Jos se jätetään pois tai on
None, kutsu estää suorituksen rajattomasti;0palaa välittömästi (estoton kysely).
Palauttaa 3-monikon listoja
(rlist, wlist, xlist). Jokainen palautettu lista on vastaavan syötelistan osajoukko, joka sisältää oliot, joista tuli valmiita luettaviksi, valmiita kirjoitettaviksi tai jotka ilmoittivat virheestä/katkoksesta. Jos timeout umpeutuu eikä mikään ole valmis, kaikki kolme listaa ovat tyhjiä.Tämä funktio on vähemmän tehokas kuin
poll(se rakentaa sisäisen kyselyjoukkonsa uudelleen jokaisella kutsulla); käytäpoll-oliota sen sijaan, kun mahdollista.
Vakiot¶
- select.POLLERR: int¶
Virrassa tapahtui virhetilanne. Tämä on pyytämätön tapahtuma: sen ilmoittavat
poll.poll()/poll.ipoll(), vaikka sitä ei pyydettäisi eventmask-arvossa, eikä sitä ole sallittua antaa syötteenä eventmask-arvossa.
- select.POLLHUP: int¶
Virta katkesi / yhteys katkesi. Tämä on pyytämätön tapahtuma: sen ilmoittavat
poll.poll()/poll.ipoll(), vaikka sitä ei pyydettäisi eventmask-arvossa, eikä sitä ole sallittua antaa syötteenä eventmask-arvossa.
Luokat¶
- class select.poll¶
Luo kyselyolio, joka ylläpitää joukkoa rekisteröityjä virtoja (tai mitä tahansa virtaprotokollan paljastavia olioita) ja odottaa tehokkaasti, kunnes yhdestä tai useammasta tulee luettava, kirjoitettava tai se ilmoittaa poikkeustilanteesta.
Virrat lisätään funktiolla
register(), poistetaan funktiollaunregister(), ja valvottavien tapahtumien joukkoa voidaan muuttaa funktiollamodify(). Kun olio on määritetty, kutsu funktiotapoll()estääksesi suorituksen kunnes jokin on valmis (tai aikakatkaisu umpeutuu), tai funktiotaipoll()allokoinnittomaan iteraattoripohjaiseen muunnelmaan.- register(obj: Any, eventmask: int = select.POLLIN | select.POLLOUT) None¶
Rekisteröi virta obj kyselyä varten valvoen eventmask-arvon antamia tapahtumia (looginen TAI seuraavista):
select.POLLIN– dataa on saatavilla luettavaksiselect.POLLOUT– virta voi ottaa vastaan lisää kirjoitettavaa dataa
eventmask-arvon oletus on
select.POLLIN | select.POLLOUT.select.POLLHUPjaselect.POLLERReivät ole kelvollisia syötteenä eventmask-arvossa – ne ovat pyytämättömiä tapahtumia, jotkapoll()/ipoll()ilmoittavat riippumatta siitä, pyydettiinkö niitä (tämä vastaa POSIX-semantiikkaa).Tätä metodia on sallittua kutsua useammin kuin kerran samalle obj-oliolle: myöhempi kutsu päivittää obj-olion tapahtumamaskin käyttäytyen kuten
modify().
- unregister(obj: Any) None¶
Poista obj rekisteröityjen virtojen joukosta. Sellaisen obj-olion poistaminen rekisteristä, jota ei ole tällä hetkellä rekisteröity, ei ole virhe (kutsulla ei ole tällöin vaikutusta).
- modify(obj: Any, eventmask: int) None¶
Muuta jo rekisteröidyn obj-olion tapahtumamaski arvoon eventmask. Nostaa poikkeuksen
OSErrorvirheelläerrno.ENOENT, jos obj ei ole rekisteröity.
- poll(timeout: int = -1, /) List[Tuple]¶
Estä suoritus, kunnes vähintään yksi rekisteröity virta tulee valmiiksi tai ilmoittaa poikkeustilanteesta, ja palauta sitten lista virroista, jotka laukesivat.
timeout on enimmäisaika, jonka odotetaan millisekunteina. Jos se jätetään pois tai on
-1, kutsu estää suorituksen rajattomasti;0palaa välittömästi (estoton kysely).Palauttaa listan
(obj, event, ...)-monikoita, yhden kutakin laukennutta virtaa kohden.objon rekisteröity virta jaeventon tapahtuneiden lippujenselect.POLLIN/select.POLLOUT/select.POLLERR/select.POLLHUPbittikohtainen TAI. Jokainen monikko voi sisältää lisäksi toteutuskohtaisia elementtejä, joten älä oleta pituuden olevan täsmälleen 2. Jos timeout umpeutuu eikä mikään ole valmis, palautetaan tyhjä lista.select.POLLHUPjaselect.POLLERRvoidaan palauttaa milloin tahansa (vaikka niitä ei pyydetty), ja niihin on reagoitava – tyypillisesti poistamalla rekisteristä ja sulkemalla kyseinen virta – muuten myöhemmät kutsut palaavat jatkuvasti välittömästi nämä liput asetettuina kyseiselle virralle.Mahdolliset vireillä olevat ajastetut takaisinkutsut suoritetaan taatusti ennen kyselysilmukkaan siirtymistä.
Ero CPythoniin
Palautetut monikot voivat sisältää enemmän kuin 2 elementtiä, kuten edellä on kuvattu.
- ipoll(timeout: int = -1, flags: int = 0, /) Iterator[Tuple]¶
Kuten
poll(), mutta listan rakentamisen sijaan se palauttaa iteraattorin, joka tuottaa yhden(obj, event, ...)-monikon kerrallaan. Tämä välttää allokoinnin jokaisella kutsulla, mikä on tärkeää asynkronisille I/O-ajoittajille.Tuotettu monikko on kutsuttavan omistama: se käytetään uudelleen (ylikirjoitetaan) seuraavalla iteraatiolla, joten sen sisältö on kulutettava silmukan rungon sisällä eikä viittauksia siihen saa tallentaa.
timeout-arvolla on sama merkitys kuin funktiossa
poll(). Jos flags on1, käytetään kertalaukaisukäyttäytymistä: virran, jonka tapahtuma laukesi, tapahtumamaski tyhjennetään automaattisesti (vastaa muotoapoll.modify(obj, 0)), joten sille ei ilmoiteta enempää tapahtumia, ennen kuin sen maski asetetaan uudelleen funktiollamodify().Mahdolliset vireillä olevat ajastetut takaisinkutsut suoritetaan taatusti ennen kyselysilmukkaan siirtymistä.
Ero CPythoniin
Tämä metodi on MicroPython-laajennus.