python / python/cpython

`multiprocessing.Pool` is incompatible with `concurrent.interpreters`

Aberta
#140,057 3 comentários 0 reações 0 responsáveis Ver no GitHub

Ninguém assumiu esta issue ainda.

3.14 3.15 stdlib topic-multiprocessing topic-subinterpreters type-bug
Linguagem predominante
Python
Estrelas
77.2k
Forks
35.9k
Métricas de merge de PRs
Métricas de PR pendentes

Descrição

Bug report

Bug description:

Trying to create a mutliprocessing.Pool in a sub-interpreter fails due to the use of daemon threads.

How I ran into it: as an experiment, I was trying to run pytest in a sub-interpreter (on its own test suite). One of the tests is using multiprocessing.Pool and fails. (There are other failures, particularly faulthandler and readline incompatibilities, but those are unrelated to this issue).

If mutliprocessing.Pool and concurrent.interpreters are fundamentally incompatible for some reason, perhaps it can be documented.

from concurrent import interpreters

interp = interpreters.create()

interp.exec("""
import multiprocessing
pool = multiprocessing.Pool()
""")

Traceback:

Traceback (most recent call last):
  File "x.py", line 5, in <module>
    interp.exec("""
    ~~~~~~~~~~~^^^^
    import multiprocessing
    ^^^^^^^^^^^^^^^^^^^^^^
    pool = multiprocessing.Pool()
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    """)
    ^^^^
  File "/home/ran/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/concurrent/interpreters/__init__.py", line 212, in exec
    raise ExecutionFailed(excinfo)
concurrent.interpreters.ExecutionFailed: RuntimeError: daemon threads are disabled in this interpreter

Uncaught in the interpreter:

Traceback (most recent call last):
  File "<script>", line 3, in <module>
  File "/home/ran/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/context.py", line 119, in Pool
    return Pool(processes, initializer, initargs, maxtasksperchild,
                context=self.get_context())
  File "/home/ran/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/multiprocessing/pool.py", line 233, in __init__
    self._worker_handler.daemon = True
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/ran/.local/share/uv/python/cpython-3.14.0-linux-x86_64-gnu/lib/python3.14/threading.py", line 1207, in daemon
    raise RuntimeError('daemon threads are disabled in this interpreter')
RuntimeError: daemon threads are disabled in this interpreter

Link to relevant code:

https://github.com/python/cpython/blob/6481539a6d9692ddf13ab01baad1bc9133409413/Lib/multiprocessing/pool.py#L226-L253

I'd also note that multiprocessing.Queue uses daemon thread:

https://github.com/python/cpython/blob/6481539a6d9692ddf13ab01baad1bc9133409413/Lib/multiprocessing/queues.py#L178-L186

CPython versions tested on:

3.14

Operating systems tested on:

Linux

Linked PRs
  • gh-140238

Guia de contribuição

Abrir o guia de contribuição

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Direção de pesquisa

Reproduza o exemplo no Python 3.14 e, em seguida, inspecione Lib/multiprocessing/pool.py e Lib/multiprocessing/queues.py no código de daemon-thread referenciado. Verifique o PR vinculado gh-140238 e o comportamento ao redor de concurrent.interpreters antes de decidir se o resultado deve ser uma alteração de compatibilidade ou documentação; considera-se concluído quando a incompatibilidade estiver resolvida ou claramente documentada.

Escrita pelo modelo de indexação a partir do texto da issue.

Avaliação

Stack de tecnologia
python
Domínio
backend
Tipo de issue
Bug
Dificuldade
4/5
Tempo estimado
3-5 dias
Status de atividade
Estagnada
Clareza
Razoavelmente clara
Facilidade para iniciantes
25/100

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.