mirror of
https://github.com/python/cpython.git
synced 2025-09-27 02:39:58 +00:00
Issue #16488: epoll() objects now support the with
statement.
Patch by Serhiy Storchaka.
This commit is contained in:
parent
c48e81ed46
commit
09bb89b8cf
4 changed files with 36 additions and 1 deletions
|
@ -47,11 +47,14 @@ The module defines the following:
|
||||||
to :const:`EPOLL_CLOEXEC`, which causes the epoll descriptor to be closed
|
to :const:`EPOLL_CLOEXEC`, which causes the epoll descriptor to be closed
|
||||||
automatically when :func:`os.execve` is called. See section
|
automatically when :func:`os.execve` is called. See section
|
||||||
:ref:`epoll-objects` below for the methods supported by epolling objects.
|
:ref:`epoll-objects` below for the methods supported by epolling objects.
|
||||||
|
They also support the :keyword:`with` statement.
|
||||||
|
|
||||||
.. versionchanged:: 3.3
|
.. versionchanged:: 3.3
|
||||||
Added the *flags* parameter.
|
Added the *flags* parameter.
|
||||||
|
|
||||||
|
.. versionchanged:: 3.4
|
||||||
|
Support for the :keyword:`with` statement was added.
|
||||||
|
|
||||||
|
|
||||||
.. function:: poll()
|
.. function:: poll()
|
||||||
|
|
||||||
|
|
|
@ -87,6 +87,13 @@ class TestEPoll(unittest.TestCase):
|
||||||
self.assertRaises(TypeError, select.epoll, ['foo'])
|
self.assertRaises(TypeError, select.epoll, ['foo'])
|
||||||
self.assertRaises(TypeError, select.epoll, {})
|
self.assertRaises(TypeError, select.epoll, {})
|
||||||
|
|
||||||
|
def test_context_manager(self):
|
||||||
|
with select.epoll(16) as ep:
|
||||||
|
self.assertGreater(ep.fileno(), 0)
|
||||||
|
self.assertFalse(ep.closed)
|
||||||
|
self.assertTrue(ep.closed)
|
||||||
|
self.assertRaises(ValueError, ep.fileno)
|
||||||
|
|
||||||
def test_add(self):
|
def test_add(self):
|
||||||
server, client = self._connected_pair()
|
server, client = self._connected_pair()
|
||||||
|
|
||||||
|
|
|
@ -167,6 +167,9 @@ Core and Builtins
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Issue #16488: epoll() objects now support the `with` statement. Patch
|
||||||
|
by Serhiy Storchaka.
|
||||||
|
|
||||||
- Issue #16298: In HTTPResponse.read(), close the socket when there is no
|
- Issue #16298: In HTTPResponse.read(), close the socket when there is no
|
||||||
Content-Length and the incoming stream is finished. Patch by Eran
|
Content-Length and the incoming stream is finished. Patch by Eran
|
||||||
Rundstein.
|
Rundstein.
|
||||||
|
|
|
@ -1394,6 +1394,24 @@ Wait for events on the epoll file descriptor for a maximum time of timeout\n\
|
||||||
in seconds (as float). -1 makes poll wait indefinitely.\n\
|
in seconds (as float). -1 makes poll wait indefinitely.\n\
|
||||||
Up to maxevents are returned to the caller.");
|
Up to maxevents are returned to the caller.");
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
pyepoll_enter(pyEpoll_Object *self, PyObject *args)
|
||||||
|
{
|
||||||
|
if (self->epfd < 0)
|
||||||
|
return pyepoll_err_closed();
|
||||||
|
|
||||||
|
Py_INCREF(self);
|
||||||
|
return (PyObject *)self;
|
||||||
|
}
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
pyepoll_exit(PyObject *self, PyObject *args)
|
||||||
|
{
|
||||||
|
_Py_IDENTIFIER(close);
|
||||||
|
|
||||||
|
return _PyObject_CallMethodId(self, &PyId_close, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
static PyMethodDef pyepoll_methods[] = {
|
static PyMethodDef pyepoll_methods[] = {
|
||||||
{"fromfd", (PyCFunction)pyepoll_fromfd,
|
{"fromfd", (PyCFunction)pyepoll_fromfd,
|
||||||
METH_VARARGS | METH_CLASS, pyepoll_fromfd_doc},
|
METH_VARARGS | METH_CLASS, pyepoll_fromfd_doc},
|
||||||
|
@ -1409,6 +1427,10 @@ static PyMethodDef pyepoll_methods[] = {
|
||||||
METH_VARARGS | METH_KEYWORDS, pyepoll_unregister_doc},
|
METH_VARARGS | METH_KEYWORDS, pyepoll_unregister_doc},
|
||||||
{"poll", (PyCFunction)pyepoll_poll,
|
{"poll", (PyCFunction)pyepoll_poll,
|
||||||
METH_VARARGS | METH_KEYWORDS, pyepoll_poll_doc},
|
METH_VARARGS | METH_KEYWORDS, pyepoll_poll_doc},
|
||||||
|
{"__enter__", (PyCFunction)pyepoll_enter, METH_NOARGS,
|
||||||
|
NULL},
|
||||||
|
{"__exit__", (PyCFunction)pyepoll_exit, METH_VARARGS,
|
||||||
|
NULL},
|
||||||
{NULL, NULL},
|
{NULL, NULL},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue