график вызовов dask: отсутствует требуемый позиционный аргумент - PullRequest
1 голос
/ 17 мая 2019

Я бы хотел, чтобы нижестоящие функции в графе вызовов dask принимали несколько аргументов, но когда я вызываю get, dask говорит, что мне не хватает позиционных аргументов.

Вот Минимальный воспроизводимый пример :

>>> import dask.threaded
>>> dsk = {'in':2, 'f1': (lambda x:(x**2, x**3), 'in'), 'out':(lambda x2,x3:(x2,x3), 'f1')}
>>> dask.threaded.get(dsk, 'out')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/nathan/GLOBAL/lib/python3.6/site-packages/dask/threaded.py", line 76, in get
    pack_exception=pack_exception, **kwargs)
  File "/home/nathan/GLOBAL/lib/python3.6/site-packages/dask/local.py", line 462, in get_async
    raise_exception(exc, tb)
  File "/home/nathan/GLOBAL/lib/python3.6/site-packages/dask/compatibility.py", line 112, in reraise
    raise exc
  File "/home/nathan/GLOBAL/lib/python3.6/site-packages/dask/local.py", line 230, in execute_task
    result = _execute_task(task, data)
  File "/home/nathan/GLOBAL/lib/python3.6/site-packages/dask/core.py", line 119, in _execute_task
    return func(*args2)
TypeError: <lambda>() missing 1 required positional argument: 'x3'

Как заставить функцию принимать несколько аргументов без использования *args?

1 Ответ

1 голос
/ 17 мая 2019

Выход (x**2, x**3) представляет собой один tuple, который не будет автоматически распакован;точно так же, как если вы передадите один tuple в функцию с несколькими параметрами.

Но если вам не нравится *args, вы могли бы распаковать кортеж.явно:

In [21]: def out(x):
    ...:     x2, x3 = x
    ...:     return (x2, 3*x3)
    ...:

In [22]: dsk = {'in': 2, 'f1': (lambda x:(x**2, x**3), 'in'), 'out': (out, 'f1')}

In [23]: dask.threaded.get(dsk, 'out')
Out[23]: (4, 24)

Или, если вы не возражаете, просто доступ к элементам по индексу:

In [27]: dsk = {'in': 2, 'f1': (lambda x: (x**2, x**3), 'in'), 'out': (lambda x: (x[0], 3*x[1]), 'f1')}

In [29]: dask.threaded.get(dsk, 'out')
Out[29]: (4, 24)
...