Uh oh!
There was an error while loading. Please reload this page.
gh-133485: Use interpreters.Interpreter in InterpreterPoolExecutor - #133957
Conversation
5340a57 to
62d7c2cCompareb3c2477 to
7697c11Compare| # InterpreterPoolInitializerTest.test_initializer fails | ||
| # if we don't have a LOAD_GLOBAL. (It could be any global.) | ||
| # We will address this separately. | ||
| INITIALIZER_STATUS |
There was a problem hiding this comment.
@markshannon, any ideas on why this is happening? It smells like a ceval bug, but it certainly could be something I've done wrong.
There was a problem hiding this comment.
There seem to be related changes in inspect.getclosurevars() since 83ba8c2:
before:
ClosureVars(nonlocals={},
globals={'INITIALIZER_STATUS': 'uninitialized'},
builtins={}, unbound=set())
after:
ClosureVars(nonlocals={},
globals={},
builtins={}, unbound=set())init()on main (without L26):
3RESUME05LOAD_FAST_BORROW0 (x)
STORE_GLOBAL0 (INITIALIZER_STATUS)
LOAD_CONST0 (None)
RETURN_VALUE- 3.3.5 (2014):
50LOAD_FAST0 (x)
3STORE_GLOBAL0 (INITIALIZER_STATUS)
6LOAD_CONST0 (None)
9RETURN_VALUE5ea2bb2 to
14a8eb9Compare14a8eb9 to
ccc135cComparebedevere-bot
commented
May 30, 2025
🤖 New build scheduled with the buildbot fleet by @ericsnowcurrently for commit ccc135c 🤖 Results will be shown at: https://buildbot.python.org/all/#/grid?branch=refs%2Fpull%2F133957%2Fmerge If you want to schedule another build, you need to add the 🔨 test-with-buildbots label again. |
neonene
commented
May 31, 2025
The |
Is the following usage invalid? INITIALIZER_STATUS='uninitialized'definit(x):
globalINITIALIZER_STATUSINITIALIZER_STATUS=xINITIALIZER_STATUS# for nowdefget_init_status():
returnINITIALIZER_STATUSif__name__=="__main__":
fromconcurrent.futuresimportInterpreterPoolExecutorexe=InterpreterPoolExecutor(initializer=init, initargs=('initialized',))
fut=exe.submit(get_init_status)
assertfut.result() =='initialized'# failsexe.shutdown(wait=True)
assertINITIALIZER_STATUS=='uninitialized' |
Line 601 in ec12559 I guess the failure case in my previous comment can be resolved if the |
| numtasks = 10 | ||
| futures = [] | ||
| executor = self.executor_type() |
There was a problem hiding this comment.
self.executor_type(max_workers=numtasks) or some better way not to get stuck?
ericsnowcurrently
commented
Jun 17, 2025
FWIW, I haven't been able to reproduce the failures locally. It certainly is consistent across all the CI workers though. |
dafd5a6 to
9a8dcddComparebb8506b to
605c802Compare32a8752 to
cce4c75Compareericsnowcurrently
commented
Jun 18, 2025
Well, I figured out the problem. Apparently However, when a task is submitted, there's a narrow window from the time the task is queued up to when a worker picks up the job. If a second task is submitted and the code reaches The new test ( The solution was to unblock the tasks that did get picked up by workers, so they could finish and the workers could pick up the remaining queued tasks. |
Thanks @ericsnowcurrently for the PR 🌮🎉.. I'm working now to backport this PR to: 3.14. |
…tor (pythongh-133957) Most importantly, this resolves the issues with functions and types defined in __main__. It also expands the number of supported objects and simplifies the implementation. (cherry picked from commit 725da50) Co-authored-by: Eric Snow <ericsnowcurrently@gmail.com>
GH-135695 is a backport of this pull request to the 3.14 branch. |
…tor (pythongh-133957) Most importantly, this resolves the issues with functions and types defined in __main__. It also expands the number of supported objects and simplifies the implementation.
…tor (pythongh-133957) Most importantly, this resolves the issues with functions and types defined in __main__. It also expands the number of supported objects and simplifies the implementation.
…tor (pythongh-133957) Most importantly, this resolves the issues with functions and types defined in __main__. It also expands the number of supported objects and simplifies the implementation.
…tor (pythongh-133957) Most importantly, this resolves the issues with functions and types defined in __main__. It also expands the number of supported objects and simplifies the implementation.
Most importantly, this resolves the issues with functions and types defined in
__main__.It also expands the number of supported objects.