Skip to content
Projeler
Gruplar
Parçacıklar
Yardım
Yükleniyor...
Oturum aç / Kaydol
Gezinmeyi değiştir
C
cpython
Proje
Proje
Ayrıntılar
Etkinlik
Cycle Analytics
Depo (repository)
Depo (repository)
Dosyalar
Kayıtlar (commit)
Dallar (branch)
Etiketler
Katkıda bulunanlar
Grafik
Karşılaştır
Grafikler
Konular (issue)
0
Konular (issue)
0
Liste
Pano
Etiketler
Kilometre Taşları
Birleştirme (merge) Talepleri
0
Birleştirme (merge) Talepleri
0
CI / CD
CI / CD
İş akışları (pipeline)
İşler
Zamanlamalar
Grafikler
Paketler
Paketler
Wiki
Wiki
Parçacıklar
Parçacıklar
Üyeler
Üyeler
Collapse sidebar
Close sidebar
Etkinlik
Grafik
Grafikler
Yeni bir konu (issue) oluştur
İşler
Kayıtlar (commit)
Konu (issue) Panoları
Kenar çubuğunu aç
Batuhan Osman TASKAYA
cpython
Commits
4574b497
Kaydet (Commit)
4574b497
authored
Eki 30, 2013
tarafından
Charles-François Natali
Dosyalara gözat
Seçenekler
Dosyalara Gözat
İndir
Eposta Yamaları
Sade Fark
Issue #19172: Add a get_map() method to selectors.
üst
7613542a
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
61 additions
and
1 deletion
+61
-1
selectors.rst
Doc/library/selectors.rst
+8
-0
selectors.py
Lib/selectors.py
+26
-1
test_selectors.py
Lib/test/test_selectors.py
+27
-0
No files found.
Doc/library/selectors.rst
Dosyayı görüntüle @
4574b497
...
...
@@ -164,6 +164,14 @@ below:
This returns the :class:`SelectorKey` instance associated to this file
object, or raises :exc:`KeyError` if the file object is not registered.
.. method:: get_map()
Return a mapping of file objects to selector keys.
This returns a :class:`~collections.abc.Mapping` instance mapping
registered file objects to their associated :class:`SelectorKey`
instance.
.. class:: DefaultSelector()
...
...
Lib/selectors.py
Dosyayı görüntüle @
4574b497
...
...
@@ -6,7 +6,7 @@ This module allows high-level and efficient I/O multiplexing, built upon the
from
abc
import
ABCMeta
,
abstractmethod
from
collections
import
namedtuple
from
collections
import
namedtuple
,
Mapping
import
functools
import
select
import
sys
...
...
@@ -44,6 +44,25 @@ SelectorKey = namedtuple('SelectorKey', ['fileobj', 'fd', 'events', 'data'])
selected event mask and attached data."""
class
_SelectorMapping
(
Mapping
):
"""Mapping of file objects to selector keys."""
def
__init__
(
self
,
selector
):
self
.
_selector
=
selector
def
__len__
(
self
):
return
len
(
self
.
_selector
.
_fd_to_key
)
def
__getitem__
(
self
,
fileobj
):
try
:
return
self
.
_selector
.
_fd_to_key
[
_fileobj_to_fd
(
fileobj
)]
except
KeyError
:
raise
KeyError
(
"{!r} is not registered"
.
format
(
fileobj
))
from
None
def
__iter__
(
self
):
return
iter
(
self
.
_selector
.
_fd_to_key
)
class
BaseSelector
(
metaclass
=
ABCMeta
):
"""Base selector class.
...
...
@@ -62,6 +81,8 @@ class BaseSelector(metaclass=ABCMeta):
def
__init__
(
self
):
# this maps file descriptors to keys
self
.
_fd_to_key
=
{}
# read-only mapping returned by get_map()
self
.
_map
=
_SelectorMapping
(
self
)
def
register
(
self
,
fileobj
,
events
,
data
=
None
):
"""Register a file object.
...
...
@@ -162,6 +183,10 @@ class BaseSelector(metaclass=ABCMeta):
except
KeyError
:
raise
KeyError
(
"{!r} is not registered"
.
format
(
fileobj
))
from
None
def
get_map
(
self
):
"""Return a mapping of file objects to selector keys."""
return
self
.
_map
def
__enter__
(
self
):
return
self
...
...
Lib/test/test_selectors.py
Dosyayı görüntüle @
4574b497
...
...
@@ -153,6 +153,33 @@ class BaseSelectorTestCase(unittest.TestCase):
# unknown file obj
self
.
assertRaises
(
KeyError
,
s
.
get_key
,
999999
)
def
test_get_map
(
self
):
s
=
self
.
SELECTOR
()
self
.
addCleanup
(
s
.
close
)
rd
,
wr
=
socketpair
()
self
.
addCleanup
(
rd
.
close
)
self
.
addCleanup
(
wr
.
close
)
keys
=
s
.
get_map
()
self
.
assertFalse
(
keys
)
self
.
assertEqual
(
len
(
keys
),
0
)
self
.
assertEqual
(
list
(
keys
),
[])
key
=
s
.
register
(
rd
,
selectors
.
EVENT_READ
,
"data"
)
self
.
assertIn
(
rd
,
keys
)
self
.
assertEqual
(
key
,
keys
[
rd
])
self
.
assertEqual
(
len
(
keys
),
1
)
self
.
assertEqual
(
list
(
keys
),
[
rd
.
fileno
()])
self
.
assertEqual
(
list
(
keys
.
values
()),
[
key
])
# unknown file obj
with
self
.
assertRaises
(
KeyError
):
keys
[
999999
]
# Read-only mapping
with
self
.
assertRaises
(
TypeError
):
del
keys
[
rd
]
def
test_select
(
self
):
s
=
self
.
SELECTOR
()
self
.
addCleanup
(
s
.
close
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment