Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

bpo-37392: Remove sys.setcheckinterval() #14355

Merged
merged 1 commit into from
Jun 25, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 0 additions & 23 deletions Doc/library/sys.rst
Original file line number Diff line number Diff line change
Expand Up @@ -551,14 +551,6 @@ always available.
.. versionadded:: 3.7


.. function:: getcheckinterval()

Return the interpreter's "check interval"; see :func:`setcheckinterval`.

.. deprecated:: 3.2
Use :func:`getswitchinterval` instead.


.. function:: getdefaultencoding()

Return the name of the current default string encoding used by the Unicode
Expand Down Expand Up @@ -1141,21 +1133,6 @@ always available.
implement a dynamic prompt.


.. function:: setcheckinterval(interval)

Set the interpreter's "check interval". This integer value determines how often
the interpreter checks for periodic things such as thread switches and signal
handlers. The default is ``100``, meaning the check is performed every 100
Python virtual instructions. Setting it to a larger value may increase
performance for programs using threads. Setting it to a value ``<=`` 0 checks
every virtual instruction, maximizing responsiveness as well as overhead.

.. deprecated:: 3.2
This function doesn't have an effect anymore, as the internal logic for
thread switching and asynchronous tasks has been rewritten. Use
:func:`setswitchinterval` instead.


.. function:: setdlopenflags(n)

Set the flags used by the interpreter for :c:func:`dlopen` calls, such as when
Expand Down
5 changes: 5 additions & 0 deletions Doc/whatsnew/3.9.rst
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,11 @@ Deprecated
Removed
=======

* The ``sys.getcheckinterval()`` and ``sys.setcheckinterval()`` functions have
been removed. They were deprecated since Python 3.2. Use
:func:`sys.getswitchinterval` and :func:`sys.setswitchinterval` instead.
(Contributed by Victor Stinner in :issue:`37392`.)

* The C function ``PyImport_Cleanup()`` has been removed. It was documented as:
"Empty the module table. For internal use only."
(Contributed by Victor Stinner in :issue:`36710`.)
Expand Down
3 changes: 0 additions & 3 deletions Include/internal/pycore_pystate.h
Original file line number Diff line number Diff line change
Expand Up @@ -82,9 +82,6 @@ struct _is {
PyObject *builtins;
PyObject *importlib;

/* Used in Python/sysmodule.c. */
int check_interval;

/* Used in Modules/_threadmodule.c. */
long num_threads;
/* Support for runtime thread stack size tuning.
Expand Down
9 changes: 0 additions & 9 deletions Lib/test/test_sys.py
Original file line number Diff line number Diff line change
Expand Up @@ -159,15 +159,6 @@ def test_getdefaultencoding(self):
# testing sys.settrace() is done in test_sys_settrace.py
# testing sys.setprofile() is done in test_sys_setprofile.py

def test_setcheckinterval(self):
with warnings.catch_warnings():
warnings.simplefilter("ignore")
self.assertRaises(TypeError, sys.setcheckinterval)
orig = sys.getcheckinterval()
for n in 0, 100, 120, orig: # orig last to restore starting state
sys.setcheckinterval(n)
self.assertEqual(sys.getcheckinterval(), n)

def test_switchinterval(self):
self.assertRaises(TypeError, sys.setswitchinterval)
self.assertRaises(TypeError, sys.setswitchinterval, "a")
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
Remove ``sys.getcheckinterval()`` and ``sys.setcheckinterval()`` functions.
They were deprecated since Python 3.2. Use :func:`sys.getswitchinterval` and
:func:`sys.setswitchinterval` instead. Remove also ``check_interval`` field of
the ``PyInterpreterState`` structure.
58 changes: 1 addition & 57 deletions Python/clinic/sysmodule.c.h

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 0 additions & 1 deletion Python/pystate.c
Original file line number Diff line number Diff line change
Expand Up @@ -203,7 +203,6 @@ PyInterpreterState_New(void)

memset(interp, 0, sizeof(*interp));
interp->id_refcount = -1;
interp->check_interval = 100;

PyStatus status = PyConfig_InitPythonConfig(&interp->config);
if (_PyStatus_EXCEPTION(status)) {
Expand Down
53 changes: 0 additions & 53 deletions Python/sysmodule.c
Original file line number Diff line number Diff line change
Expand Up @@ -1025,56 +1025,6 @@ sys_getprofile_impl(PyObject *module)
return temp;
}

/*[clinic input]
sys.setcheckinterval

n: int
/

Set the async event check interval to n instructions.

This tells the Python interpreter to check for asynchronous events
every n instructions.

This also affects how often thread switches occur.
[clinic start generated code]*/

static PyObject *
sys_setcheckinterval_impl(PyObject *module, int n)
/*[clinic end generated code: output=3f686cef07e6e178 input=7a35b17bf22a6227]*/
{
if (PyErr_WarnEx(PyExc_DeprecationWarning,
"sys.getcheckinterval() and sys.setcheckinterval() "
"are deprecated. Use sys.setswitchinterval() "
"instead.", 1) < 0) {
return NULL;
}

PyThreadState *tstate = _PyThreadState_GET();
tstate->interp->check_interval = n;
Py_RETURN_NONE;
}

/*[clinic input]
sys.getcheckinterval

Return the current check interval; see sys.setcheckinterval().
[clinic start generated code]*/

static PyObject *
sys_getcheckinterval_impl(PyObject *module)
/*[clinic end generated code: output=1b5060bf2b23a47c input=4b6589cbcca1db4e]*/
{
if (PyErr_WarnEx(PyExc_DeprecationWarning,
"sys.getcheckinterval() and sys.setcheckinterval() "
"are deprecated. Use sys.getswitchinterval() "
"instead.", 1) < 0) {
return NULL;
}

PyThreadState *tstate = _PyThreadState_GET();
return PyLong_FromLong(tstate->interp->check_interval);
}

/*[clinic input]
sys.setswitchinterval
Expand Down Expand Up @@ -1990,8 +1940,6 @@ static PyMethodDef sys_methods[] = {
SYS_INTERN_METHODDEF
SYS_IS_FINALIZING_METHODDEF
SYS_MDEBUG_METHODDEF
SYS_SETCHECKINTERVAL_METHODDEF
SYS_GETCHECKINTERVAL_METHODDEF
SYS_SETSWITCHINTERVAL_METHODDEF
SYS_GETSWITCHINTERVAL_METHODDEF
SYS_SETDLOPENFLAGS_METHODDEF
Expand Down Expand Up @@ -2430,7 +2378,6 @@ getrefcount() -- return the reference count for an object (plus one :-)\n\
getrecursionlimit() -- return the max recursion depth for the interpreter\n\
getsizeof() -- return the size of an object in bytes\n\
gettrace() -- get the global debug tracing function\n\
setcheckinterval() -- control how often the interpreter checks for events\n\
setdlopenflags() -- set the flags to be used for dlopen() calls\n\
setprofile() -- set the global profiling function\n\
setrecursionlimit() -- set the max recursion depth for the interpreter\n\
Expand Down
6 changes: 4 additions & 2 deletions Tools/ccbench/ccbench.py
Original file line number Diff line number Diff line change
Expand Up @@ -541,10 +541,12 @@ def main():
help="run I/O bandwidth tests")
parser.add_option("-i", "--interval",
action="store", type="int", dest="check_interval", default=None,
help="sys.setcheckinterval() value")
help="sys.setcheckinterval() value "
"(Python 3.8 and older)")
parser.add_option("-I", "--switch-interval",
action="store", type="float", dest="switch_interval", default=None,
help="sys.setswitchinterval() value")
help="sys.setswitchinterval() value "
"(Python 3.2 and newer)")
parser.add_option("-n", "--num-threads",
action="store", type="int", dest="nthreads", default=4,
help="max number of threads in tests")
Expand Down