Plattformsstöd¶
Modulen asyncio
är utformad för att vara portabel, men vissa plattformar har subtila skillnader och begränsningar på grund av plattformarnas underliggande arkitektur och kapacitet.
Alla plattformar¶
loop.add_reader()
ochloop.add_writer()
kan inte användas för att övervaka fil-I/O.
Windows¶
Källkod: Lib/asyncio/proactor_events.py, Lib/asyncio/windows_events.py, Lib/asyncio/windows_utils.py
Ändrad i version 3.8: I Windows är ProactorEventLoop
nu standardhändelseslingan.
Alla händelseslingor i Windows stöder inte följande metoder:
loop.create_unix_connection()
ochloop.create_unix_server()
stöds inte. Socketfamiljensocket.AF_UNIX
är specifik för Unix.loop.add_signal_handler()
ochloop.remove_signal_handler()
stöds inte.
SelectorEventLoop
har följande begränsningar:
SelectSelector
används för att vänta på socket-händelser: den stöder sockets och är begränsad till 512 sockets.loop.add_reader()
ochloop.add_writer()
accepterar endast socket-handtag (t.ex. pipe file descriptors stöds inte).Pipes stöds inte, så metoderna
loop.connect_read_pipe()
ochloop.connect_write_pipe()
implementeras inte.Subprocesser stöds inte, dvs. metoderna
loop.subprocess_exec()
ochloop.subprocess_shell()
implementeras inte.
ProactorEventLoop
har följande begränsningar:
Metoderna
loop.add_reader()
ochloop.add_writer()
stöds inte.
Upplösningen för den monotona klockan i Windows är vanligtvis cirka 15,6 millisekunder. Den bästa upplösningen är 0,5 millisekunder. Upplösningen beror på maskinvaran (tillgång till HPET) och på Windows-konfigurationen.
Stöd för underprocesser i Windows¶
I Windows har standardhändelseslingan ProactorEventLoop
stöd för underprocesser, medan SelectorEventLoop
inte har det.
macOS¶
Moderna macOS-versioner stöds fullt ut.
macOS <= 10.8
På macOS 10.6, 10.7 och 10.8 använder standardhändelseslingan selectors.KqueueSelector
, som inte stöder teckenenheter på dessa versioner. Händelseslingan SelectorEventLoop
kan konfigureras manuellt så att den använder SelectSelector
eller PollSelector
för att stödja teckenenheter i dessa äldre versioner av macOS. Exempel:
import asyncio
import selectors
selector = selectors.SelectSelector()
loop = asyncio.SelectorEventLoop(selector)
asyncio.set_event_loop(loop)