Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork32k
Open
Description
Bug report
Bug description:
Below code demonstrates two problems that occur when
(a) worker process throws an exception, and
(b)shutdown(wait=False)
is used
- When max_workers < number of submitted tasks, raises
exception TypeError: object of type 'NoneType' has no len()
- When max_workers > number of submitted tasks, raises
exception TypeError: object of type 'NoneType' has no len()
AND then program hangs
There is no problem whenshutdown(wait=True)
is used or if the worker processes exit cleanly.
importconcurrent.futuresimportmultiprocessingasmpimporttimedeftask(n:int)->int:ifn==2:raiseException("Not gonna do it")else:time.sleep(n)returnndefmain()->None:# max_workers=2 results in raised exception and program exits# max_workers=4 results in raised exception and program hangs#executor=concurrent.futures.ProcessPoolExecutor(max_workers=2,mp_context=mp.get_context("forkserver"),max_tasks_per_child=1 )f1=executor.submit(task,1)f2=executor.submit(task,2)f3=executor.submit(task,3)result=0try:result+=f1.result()result+=f2.result()result+=f3.result()print(f"Result ={result}")exceptExceptionase:print(f"Exception while getting result :{e}")executor.shutdown(wait=False)if__name__=="__main__":main()
CPython versions tested on:
3.12
Operating systems tested on:
Linux, macOS
Linked PRs
Metadata
Metadata
Assignees
Labels
Projects
Status
Todo