mirror of
https://github.com/python/cpython
synced 2026-09-29 12:10:30 +03:00
gh-89240: Enable multiprocessing on Windows to use large process pools (GH-107873)
We add _winapi.BatchedWaitForMultipleObjects to wait for larger numbers of handles. This is an internal module, hence undocumented, and should be used with caution. Check the docstring for info before using BatchedWaitForMultipleObjects.
This commit is contained in:
parent
2f0778675a
commit
ea25f32d5f
12 changed files with 1195 additions and 6 deletions
|
|
@ -883,6 +883,7 @@ _PyStaticObjects_CheckRefcnt(PyInterpreterState *interp) {
|
|||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(defaultaction));
|
||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(delete));
|
||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(depth));
|
||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(desired_access));
|
||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(detect_types));
|
||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(deterministic));
|
||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(device));
|
||||
|
|
@ -973,6 +974,7 @@ _PyStaticObjects_CheckRefcnt(PyInterpreterState *interp) {
|
|||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(groups));
|
||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(h));
|
||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(handle));
|
||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(handle_seq));
|
||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(hash_name));
|
||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(header));
|
||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(headers));
|
||||
|
|
@ -990,9 +992,12 @@ _PyStaticObjects_CheckRefcnt(PyInterpreterState *interp) {
|
|||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(indexgroup));
|
||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(inf));
|
||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(infer_variance));
|
||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(inherit_handle));
|
||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(inheritable));
|
||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(initial));
|
||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(initial_bytes));
|
||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(initial_owner));
|
||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(initial_state));
|
||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(initial_value));
|
||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(initval));
|
||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(inner_size));
|
||||
|
|
@ -1048,6 +1053,7 @@ _PyStaticObjects_CheckRefcnt(PyInterpreterState *interp) {
|
|||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(locals));
|
||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(logoption));
|
||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(loop));
|
||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(manual_reset));
|
||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(mapping));
|
||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(match));
|
||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(max_length));
|
||||
|
|
@ -1064,6 +1070,7 @@ _PyStaticObjects_CheckRefcnt(PyInterpreterState *interp) {
|
|||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(metadata));
|
||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(method));
|
||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(microsecond));
|
||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(milliseconds));
|
||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(minute));
|
||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(mod));
|
||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(mode));
|
||||
|
|
@ -1073,6 +1080,7 @@ _PyStaticObjects_CheckRefcnt(PyInterpreterState *interp) {
|
|||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(month));
|
||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(mro));
|
||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(msg));
|
||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(mutex));
|
||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(mycmp));
|
||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(n));
|
||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(n_arg));
|
||||
|
|
@ -1176,6 +1184,7 @@ _PyStaticObjects_CheckRefcnt(PyInterpreterState *interp) {
|
|||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(sched_priority));
|
||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(scheduler));
|
||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(second));
|
||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(security_attributes));
|
||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(seek));
|
||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(seekable));
|
||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(selectors));
|
||||
|
|
@ -1263,6 +1272,7 @@ _PyStaticObjects_CheckRefcnt(PyInterpreterState *interp) {
|
|||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(values));
|
||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(version));
|
||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(volume));
|
||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(wait_all));
|
||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(warnings));
|
||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(warnoptions));
|
||||
_PyStaticObject_CheckRefcnt((PyObject *)&_Py_ID(wbits));
|
||||
|
|
|
|||
|
|
@ -372,6 +372,7 @@ struct _Py_global_strings {
|
|||
STRUCT_FOR_ID(defaultaction)
|
||||
STRUCT_FOR_ID(delete)
|
||||
STRUCT_FOR_ID(depth)
|
||||
STRUCT_FOR_ID(desired_access)
|
||||
STRUCT_FOR_ID(detect_types)
|
||||
STRUCT_FOR_ID(deterministic)
|
||||
STRUCT_FOR_ID(device)
|
||||
|
|
@ -462,6 +463,7 @@ struct _Py_global_strings {
|
|||
STRUCT_FOR_ID(groups)
|
||||
STRUCT_FOR_ID(h)
|
||||
STRUCT_FOR_ID(handle)
|
||||
STRUCT_FOR_ID(handle_seq)
|
||||
STRUCT_FOR_ID(hash_name)
|
||||
STRUCT_FOR_ID(header)
|
||||
STRUCT_FOR_ID(headers)
|
||||
|
|
@ -479,9 +481,12 @@ struct _Py_global_strings {
|
|||
STRUCT_FOR_ID(indexgroup)
|
||||
STRUCT_FOR_ID(inf)
|
||||
STRUCT_FOR_ID(infer_variance)
|
||||
STRUCT_FOR_ID(inherit_handle)
|
||||
STRUCT_FOR_ID(inheritable)
|
||||
STRUCT_FOR_ID(initial)
|
||||
STRUCT_FOR_ID(initial_bytes)
|
||||
STRUCT_FOR_ID(initial_owner)
|
||||
STRUCT_FOR_ID(initial_state)
|
||||
STRUCT_FOR_ID(initial_value)
|
||||
STRUCT_FOR_ID(initval)
|
||||
STRUCT_FOR_ID(inner_size)
|
||||
|
|
@ -537,6 +542,7 @@ struct _Py_global_strings {
|
|||
STRUCT_FOR_ID(locals)
|
||||
STRUCT_FOR_ID(logoption)
|
||||
STRUCT_FOR_ID(loop)
|
||||
STRUCT_FOR_ID(manual_reset)
|
||||
STRUCT_FOR_ID(mapping)
|
||||
STRUCT_FOR_ID(match)
|
||||
STRUCT_FOR_ID(max_length)
|
||||
|
|
@ -553,6 +559,7 @@ struct _Py_global_strings {
|
|||
STRUCT_FOR_ID(metadata)
|
||||
STRUCT_FOR_ID(method)
|
||||
STRUCT_FOR_ID(microsecond)
|
||||
STRUCT_FOR_ID(milliseconds)
|
||||
STRUCT_FOR_ID(minute)
|
||||
STRUCT_FOR_ID(mod)
|
||||
STRUCT_FOR_ID(mode)
|
||||
|
|
@ -562,6 +569,7 @@ struct _Py_global_strings {
|
|||
STRUCT_FOR_ID(month)
|
||||
STRUCT_FOR_ID(mro)
|
||||
STRUCT_FOR_ID(msg)
|
||||
STRUCT_FOR_ID(mutex)
|
||||
STRUCT_FOR_ID(mycmp)
|
||||
STRUCT_FOR_ID(n)
|
||||
STRUCT_FOR_ID(n_arg)
|
||||
|
|
@ -665,6 +673,7 @@ struct _Py_global_strings {
|
|||
STRUCT_FOR_ID(sched_priority)
|
||||
STRUCT_FOR_ID(scheduler)
|
||||
STRUCT_FOR_ID(second)
|
||||
STRUCT_FOR_ID(security_attributes)
|
||||
STRUCT_FOR_ID(seek)
|
||||
STRUCT_FOR_ID(seekable)
|
||||
STRUCT_FOR_ID(selectors)
|
||||
|
|
@ -752,6 +761,7 @@ struct _Py_global_strings {
|
|||
STRUCT_FOR_ID(values)
|
||||
STRUCT_FOR_ID(version)
|
||||
STRUCT_FOR_ID(volume)
|
||||
STRUCT_FOR_ID(wait_all)
|
||||
STRUCT_FOR_ID(warnings)
|
||||
STRUCT_FOR_ID(warnoptions)
|
||||
STRUCT_FOR_ID(wbits)
|
||||
|
|
|
|||
10
Include/internal/pycore_runtime_init_generated.h
generated
10
Include/internal/pycore_runtime_init_generated.h
generated
|
|
@ -881,6 +881,7 @@ extern "C" {
|
|||
INIT_ID(defaultaction), \
|
||||
INIT_ID(delete), \
|
||||
INIT_ID(depth), \
|
||||
INIT_ID(desired_access), \
|
||||
INIT_ID(detect_types), \
|
||||
INIT_ID(deterministic), \
|
||||
INIT_ID(device), \
|
||||
|
|
@ -971,6 +972,7 @@ extern "C" {
|
|||
INIT_ID(groups), \
|
||||
INIT_ID(h), \
|
||||
INIT_ID(handle), \
|
||||
INIT_ID(handle_seq), \
|
||||
INIT_ID(hash_name), \
|
||||
INIT_ID(header), \
|
||||
INIT_ID(headers), \
|
||||
|
|
@ -988,9 +990,12 @@ extern "C" {
|
|||
INIT_ID(indexgroup), \
|
||||
INIT_ID(inf), \
|
||||
INIT_ID(infer_variance), \
|
||||
INIT_ID(inherit_handle), \
|
||||
INIT_ID(inheritable), \
|
||||
INIT_ID(initial), \
|
||||
INIT_ID(initial_bytes), \
|
||||
INIT_ID(initial_owner), \
|
||||
INIT_ID(initial_state), \
|
||||
INIT_ID(initial_value), \
|
||||
INIT_ID(initval), \
|
||||
INIT_ID(inner_size), \
|
||||
|
|
@ -1046,6 +1051,7 @@ extern "C" {
|
|||
INIT_ID(locals), \
|
||||
INIT_ID(logoption), \
|
||||
INIT_ID(loop), \
|
||||
INIT_ID(manual_reset), \
|
||||
INIT_ID(mapping), \
|
||||
INIT_ID(match), \
|
||||
INIT_ID(max_length), \
|
||||
|
|
@ -1062,6 +1068,7 @@ extern "C" {
|
|||
INIT_ID(metadata), \
|
||||
INIT_ID(method), \
|
||||
INIT_ID(microsecond), \
|
||||
INIT_ID(milliseconds), \
|
||||
INIT_ID(minute), \
|
||||
INIT_ID(mod), \
|
||||
INIT_ID(mode), \
|
||||
|
|
@ -1071,6 +1078,7 @@ extern "C" {
|
|||
INIT_ID(month), \
|
||||
INIT_ID(mro), \
|
||||
INIT_ID(msg), \
|
||||
INIT_ID(mutex), \
|
||||
INIT_ID(mycmp), \
|
||||
INIT_ID(n), \
|
||||
INIT_ID(n_arg), \
|
||||
|
|
@ -1174,6 +1182,7 @@ extern "C" {
|
|||
INIT_ID(sched_priority), \
|
||||
INIT_ID(scheduler), \
|
||||
INIT_ID(second), \
|
||||
INIT_ID(security_attributes), \
|
||||
INIT_ID(seek), \
|
||||
INIT_ID(seekable), \
|
||||
INIT_ID(selectors), \
|
||||
|
|
@ -1261,6 +1270,7 @@ extern "C" {
|
|||
INIT_ID(values), \
|
||||
INIT_ID(version), \
|
||||
INIT_ID(volume), \
|
||||
INIT_ID(wait_all), \
|
||||
INIT_ID(warnings), \
|
||||
INIT_ID(warnoptions), \
|
||||
INIT_ID(wbits), \
|
||||
|
|
|
|||
30
Include/internal/pycore_unicodeobject_generated.h
generated
30
Include/internal/pycore_unicodeobject_generated.h
generated
|
|
@ -957,6 +957,9 @@ _PyUnicode_InitStaticStrings(PyInterpreterState *interp) {
|
|||
string = &_Py_ID(depth);
|
||||
assert(_PyUnicode_CheckConsistency(string, 1));
|
||||
_PyUnicode_InternInPlace(interp, &string);
|
||||
string = &_Py_ID(desired_access);
|
||||
assert(_PyUnicode_CheckConsistency(string, 1));
|
||||
_PyUnicode_InternInPlace(interp, &string);
|
||||
string = &_Py_ID(detect_types);
|
||||
assert(_PyUnicode_CheckConsistency(string, 1));
|
||||
_PyUnicode_InternInPlace(interp, &string);
|
||||
|
|
@ -1227,6 +1230,9 @@ _PyUnicode_InitStaticStrings(PyInterpreterState *interp) {
|
|||
string = &_Py_ID(handle);
|
||||
assert(_PyUnicode_CheckConsistency(string, 1));
|
||||
_PyUnicode_InternInPlace(interp, &string);
|
||||
string = &_Py_ID(handle_seq);
|
||||
assert(_PyUnicode_CheckConsistency(string, 1));
|
||||
_PyUnicode_InternInPlace(interp, &string);
|
||||
string = &_Py_ID(hash_name);
|
||||
assert(_PyUnicode_CheckConsistency(string, 1));
|
||||
_PyUnicode_InternInPlace(interp, &string);
|
||||
|
|
@ -1278,6 +1284,9 @@ _PyUnicode_InitStaticStrings(PyInterpreterState *interp) {
|
|||
string = &_Py_ID(infer_variance);
|
||||
assert(_PyUnicode_CheckConsistency(string, 1));
|
||||
_PyUnicode_InternInPlace(interp, &string);
|
||||
string = &_Py_ID(inherit_handle);
|
||||
assert(_PyUnicode_CheckConsistency(string, 1));
|
||||
_PyUnicode_InternInPlace(interp, &string);
|
||||
string = &_Py_ID(inheritable);
|
||||
assert(_PyUnicode_CheckConsistency(string, 1));
|
||||
_PyUnicode_InternInPlace(interp, &string);
|
||||
|
|
@ -1287,6 +1296,12 @@ _PyUnicode_InitStaticStrings(PyInterpreterState *interp) {
|
|||
string = &_Py_ID(initial_bytes);
|
||||
assert(_PyUnicode_CheckConsistency(string, 1));
|
||||
_PyUnicode_InternInPlace(interp, &string);
|
||||
string = &_Py_ID(initial_owner);
|
||||
assert(_PyUnicode_CheckConsistency(string, 1));
|
||||
_PyUnicode_InternInPlace(interp, &string);
|
||||
string = &_Py_ID(initial_state);
|
||||
assert(_PyUnicode_CheckConsistency(string, 1));
|
||||
_PyUnicode_InternInPlace(interp, &string);
|
||||
string = &_Py_ID(initial_value);
|
||||
assert(_PyUnicode_CheckConsistency(string, 1));
|
||||
_PyUnicode_InternInPlace(interp, &string);
|
||||
|
|
@ -1452,6 +1467,9 @@ _PyUnicode_InitStaticStrings(PyInterpreterState *interp) {
|
|||
string = &_Py_ID(loop);
|
||||
assert(_PyUnicode_CheckConsistency(string, 1));
|
||||
_PyUnicode_InternInPlace(interp, &string);
|
||||
string = &_Py_ID(manual_reset);
|
||||
assert(_PyUnicode_CheckConsistency(string, 1));
|
||||
_PyUnicode_InternInPlace(interp, &string);
|
||||
string = &_Py_ID(mapping);
|
||||
assert(_PyUnicode_CheckConsistency(string, 1));
|
||||
_PyUnicode_InternInPlace(interp, &string);
|
||||
|
|
@ -1500,6 +1518,9 @@ _PyUnicode_InitStaticStrings(PyInterpreterState *interp) {
|
|||
string = &_Py_ID(microsecond);
|
||||
assert(_PyUnicode_CheckConsistency(string, 1));
|
||||
_PyUnicode_InternInPlace(interp, &string);
|
||||
string = &_Py_ID(milliseconds);
|
||||
assert(_PyUnicode_CheckConsistency(string, 1));
|
||||
_PyUnicode_InternInPlace(interp, &string);
|
||||
string = &_Py_ID(minute);
|
||||
assert(_PyUnicode_CheckConsistency(string, 1));
|
||||
_PyUnicode_InternInPlace(interp, &string);
|
||||
|
|
@ -1527,6 +1548,9 @@ _PyUnicode_InitStaticStrings(PyInterpreterState *interp) {
|
|||
string = &_Py_ID(msg);
|
||||
assert(_PyUnicode_CheckConsistency(string, 1));
|
||||
_PyUnicode_InternInPlace(interp, &string);
|
||||
string = &_Py_ID(mutex);
|
||||
assert(_PyUnicode_CheckConsistency(string, 1));
|
||||
_PyUnicode_InternInPlace(interp, &string);
|
||||
string = &_Py_ID(mycmp);
|
||||
assert(_PyUnicode_CheckConsistency(string, 1));
|
||||
_PyUnicode_InternInPlace(interp, &string);
|
||||
|
|
@ -1836,6 +1860,9 @@ _PyUnicode_InitStaticStrings(PyInterpreterState *interp) {
|
|||
string = &_Py_ID(second);
|
||||
assert(_PyUnicode_CheckConsistency(string, 1));
|
||||
_PyUnicode_InternInPlace(interp, &string);
|
||||
string = &_Py_ID(security_attributes);
|
||||
assert(_PyUnicode_CheckConsistency(string, 1));
|
||||
_PyUnicode_InternInPlace(interp, &string);
|
||||
string = &_Py_ID(seek);
|
||||
assert(_PyUnicode_CheckConsistency(string, 1));
|
||||
_PyUnicode_InternInPlace(interp, &string);
|
||||
|
|
@ -2097,6 +2124,9 @@ _PyUnicode_InitStaticStrings(PyInterpreterState *interp) {
|
|||
string = &_Py_ID(volume);
|
||||
assert(_PyUnicode_CheckConsistency(string, 1));
|
||||
_PyUnicode_InternInPlace(interp, &string);
|
||||
string = &_Py_ID(wait_all);
|
||||
assert(_PyUnicode_CheckConsistency(string, 1));
|
||||
_PyUnicode_InternInPlace(interp, &string);
|
||||
string = &_Py_ID(warnings);
|
||||
assert(_PyUnicode_CheckConsistency(string, 1));
|
||||
_PyUnicode_InternInPlace(interp, &string);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue