Worker management race conditions in `ThreadPoolExecutor` and `ProcessPoolExecutor`
Ninguém assumiu esta issue ainda.
- Linguagem predominante
- Python
- Estrelas
- 77.2k
- Forks
- 36k
- Métricas de merge de PRs
- Métricas de PR pendentes
Descrição
We have tests that ThreadPoolExecutor and ProcessPoolExecutor reuse workers. The test wait for the previous task to complete before submitting the next task.
The problem is that the tasks are potentially completed before the thread or process is marked as idle. Calling Future.result() doesn't guarantee that there is an idle worker. This happens much more frequently with the GIL disabled, but it can happen with the GIL enabled too if you have an unlucky GIL switch.
For example, you can reliably trigger the problem with the GIL enabled by adding a short time.sleep(0.01) immediately after the work_item.run() call in:
https://github.com/python/cpython/blob/29829b58a8328a7c2ccacaa74c1d7d120a5e5ca5/Lib/concurrent/futures/thread.py#L92
It's not clear to me if this is just a problem with the unit tests or an actual bug with the executor implementation.
Linked PRs
- gh-117355
Guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Direção de pesquisa
Comece com os testes de reutilização citados em Lib/test/test_concurrent_futures/test_thread_pool.py e com o código do ciclo de vida dos workers em Lib/concurrent/futures/thread.py; inspecione também os caminhos correspondentes de ProcessPoolExecutor. Determine se a condição de corrida exige uma sincronização mais forte nos testes ou uma alteração no executor e, em seguida, execute a suíte de testes de concurrent-futures e garanta que a reutilização dos workers seja confiável tanto na execução com o GIL habilitado quanto na execução com o GIL desabilitado.
Escrita pelo modelo de indexação a partir do texto da issue.
Avaliação
- Stack de tecnologia
- python
- Domínio
- backend, distributed-systems, testing-qa
- Tipo de issue
- Bug
- Dificuldade
- 4/5
- Tempo estimado
- 3-5 dias
- Status de atividade
- Estagnada
- Clareza
- Precisa de esclarecimento
- Facilidade para iniciantes
- 25/100