Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

While registering a scheduler plugin get TypeError: PooledRPCCall.__getattr__.<locals>.send_recv_from_rpc() takes 0 positional arguments but 1 was given

Abierto
#9,001 7 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
48/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Estancado
Stack tecnológico
python

Línea de trabajo

Comienza con distributed/core.py en PooledRPCCall.getattr y ejecuta el ejemplo de scheduler-plugin del issue para reproducir el TypeError de Scheduler.add_plugin. Sigue la invocación del callable RPC generado y verifica que el ejemplo registre correctamente el plugin sin el error de argumento posicional, con cobertura de regresión para este recorrido si el repositorio tiene una ubicación de pruebas adecuada.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

bug regression

Describe the issue:

When registering a Dask scheduler plugin via Scheduler.add_plugin, we get the following error:

TypeError: PooledRPCCall.__getattr__.<locals>.send_recv_from_rpc() takes 0 positional arguments but 1 was given

The offending code is in distributed's core.py:

     def __getattr__(self, key):
        async def send_recv_from_rpc(**kwargs): # THIS IS WHERE THE ERROR IS RAISED
            if self.serializers is not None and kwargs.get("serializers") is None:
                kwargs["serializers"] = self.serializers
            if self.deserializers is not None and kwargs.get("deserializers") is None:
                kwargs["deserializers"] = self.deserializers
            comm = await self.pool.connect(self.addr)
            prev_name, comm.name = comm.name, "ConnectionPool." + key
            try:
                return await send_recv(comm=comm, op=key, **kwargs)
            finally:
                self.pool.reuse(self.addr, comm)
                comm.name = prev_name

Minimal Complete Verifiable Example:

Taken from your own example of a scheduler plugin, which DOES NOT WORK NOW.

from distributed import Client, LocalCluster, SchedulerPlugin

class MySchedulerPlugin(SchedulerPlugin):
    def __init__(self):
        self.counter = 0

    def transition(self, key, start, finish, *args, **kwargs):
        if start == 'processing' and finish == 'memory':
            self.counter += 1

    def restart(self, scheduler):
        self.counter = 0

if __name__ == '__main__':
    with Client() as client:
        print(f'scheduler={client.scheduler}')
        my_scheduler_plugin = MySchedulerPlugin()
        client.scheduler.add_plugin(my_scheduler_plugin)
    print('Done')

This produces the following;

scheduler=<pooled rpc to 'tcp://127.0.0.1:57991'>
Traceback (most recent call last):
  File "/Users/may/Projects/scratch/dask_scheduler/scheduler.py", line 22, in <module>
    client.scheduler.add_plugin(my_scheduler_plugin)
TypeError: PooledRPCCall.__getattr__.<locals>.send_recv_from_rpc() takes 0 positional arguments but 1 was given

Anything else we need to know?:
N/A

Environment:

  • Dask version:
dask                    2024.10.0
distributed             2024.10.0

And the same behavior observed for 2024.11.2

  • Python version: 3.10.15 and 3.11.7
  • Operating System:
    • Darwin mac135909 24.2.0 Darwin Kernel Version 24.2.0: Fri Dec 6 18:56:34 PST 2024; root:xnu-11215.61.5~2/RELEASE_ARM64_T6020 arm64
    • Linux login05 5.14.21-150500.55.49_13.0.57-cray_shasta_c #1 SMP Sun May 12 13:35:37 UTC 2024 (33add2b) x86_64 x86_64 x86_64 GNU/Linux
  • Install method (conda, pip, source):
    • conda and pip
Lenguaje dominante
Python
Estrellas
1.7k
Forks
780
Métricas de merge de PR
Sin PR fusionados en 30 d

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de dask/distributed

Todos los issues de dask/distributed

Issues similares

Más issues de Python

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.