MagicStack / MagicStack/uvloop

TypeError: create_task() got an unexpected keyword argument 'eager_start'

Aberta
#754 1 comentário 1 reação 0 responsáveis Ver no GitHub

Ninguém assumiu esta issue ainda.

Linguagem predominante
Cython
Estrelas
11.9k
Forks
616
Métricas de merge de PRs
Nenhum PR com merge em 30d

Descrição

python 3.14.2 `asyncio.create_task()` accepts a kwarg `eager_start: True`. uvloop 0.22.1 does not and raises a type error:

```
File "/Users/enda/Workspaces/project/api/src/prject/queries/counts.py", line 84, in _single_flight
task = asyncio.create_task(_run(), name=f"single_flight:{key}", eager_start=True)
File "/Users/enda/.local/share/uv/python/cpython-3.14.2-macos-aarch64-none/lib/python3.14/asyncio/tasks.py", line 395, in create_task
return loop.create_task(coro, **kwargs)
~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^
File "uvloop/loop.pyx", line 1415, in uvloop.loop.Loop.create_task
TypeError: create_task() got an unexpected keyword argument 'eager_start'
```

I understand that "accept but ignore-with-a-warning" is not a desirable approach as developers will expect that passing this in as True will cause the task to start eagerly. However, at present the first sentence of the project "uvloop is a fast, drop-in replacement of the built-in asyncio event loop. " is no longer100% accurate and that's not desired either.

I've only recently become aware of `eager_start` but it /seems/ to have been in discussion for over 18 months: https://discuss.python.org/t/make-asyncio-eager-task-factory-default/75164 (and uvloop gets a mention in there).

As I don't know what is involved in accepting and respecting an `eager_start=True` I don't want to say what I expect this issue to amount to, but it made its way pasting our testing as we were not using `uvloop` in the original tests which covered our `_single_flight` code, but our deployed code hit it. Clearly we have now fixed that testing oversite but others may experience this too.

Guia de contribuição

Nenhum guia de contribuição indexado para este repositório

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

Comece em uvloop.loop.Loop.create_task em loop.pyx, onde o traceback mostra que o argumento nomeado eager_start do Python 3.14 é rejeitado, e compare isso com o comportamento de asyncio.create_task. Determine como o uvloop deve aceitar e respeitar eager_start=True sem simplesmente ignorá-lo; considera-se concluído quando a chamada relatada funciona no uvloop com a semântica eager-start pretendida.

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
Pouca atividade
Clareza
Razoavelmente clara
Facilidade para iniciantes
48/100

Receba novas issues na sua caixa de entrada

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