MCPcopy Index your code
hub / github.com/python/cpython / IocpProactor

Class IocpProactor

Lib/asyncio/windows_events.py:417–873  ·  view source on GitHub ↗

Proactor implementation using IOCP.

Source from the content-addressed store, hash-verified

415
416
417class IocpProactor:
418 """Proactor implementation using IOCP."""
419
420 def __init__(self, concurrency=INFINITE):
421 self._loop = None
422 self._results = []
423 self._iocp = _overlapped.CreateIoCompletionPort(
424 _overlapped.INVALID_HANDLE_VALUE, NULL, 0, concurrency)
425 self._cache = {}
426 self._registered = weakref.WeakSet()
427 self._unregistered = []
428 self._stopped_serving = weakref.WeakSet()
429
430 def _check_closed(self):
431 if self._iocp is None:
432 raise RuntimeError('IocpProactor is closed')
433
434 def __repr__(self):
435 info = ['overlapped#=%s' % len(self._cache),
436 'result#=%s' % len(self._results)]
437 if self._iocp is None:
438 info.append('closed')
439 return '<%s %s>' % (self.__class__.__name__, " ".join(info))
440
441 def set_loop(self, loop):
442 self._loop = loop
443
444 def select(self, timeout=None):
445 if not self._results:
446 self._poll(timeout)
447 tmp = self._results
448 self._results = []
449 try:
450 return tmp
451 finally:
452 # Needed to break cycles when an exception occurs.
453 tmp = None
454
455 def _result(self, value):
456 fut = self._loop.create_future()
457 fut.set_result(value)
458 return fut
459
460 @staticmethod
461 def finish_socket_func(trans, key, ov):
462 try:
463 return ov.getresult()
464 except OSError as exc:
465 if exc.winerror in (_overlapped.ERROR_NETNAME_DELETED,
466 _overlapped.ERROR_OPERATION_ABORTED):
467 raise ConnectionResetError(*exc.args)
468 else:
469 raise
470
471 @classmethod
472 def _finish_recvfrom(cls, trans, key, ov, *, empty_result):
473 try:
474 return cls.finish_socket_func(trans, key, ov)

Callers 1

__init__Method · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…