python - dask 调用图:缺少必需的位置参数
问题描述
我想让 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
?
解决方案
输出(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)
推荐阅读
- django - django 中的 FileFields 是否有等效的“list_editable”?
- javascript - 当我将它悬停在他的父 div 上时,为什么我的 div 会消失?
- php - 如何使用计划挂钩运行 wordpress cron 作业?
- flutter - 我需要一个用于 Flutter 的 Android 模拟器吗
- r - 有没有办法在变量被更改之前存储它?
- react-native - 升级到 React 导航 5:访问路径的子导航状态不安全且无法正常工作
- mongodb - bash:/usr/local/bin/mongo:Catalina OS 中的权限被拒绝
- c# - 如何使用映射选项模拟映射配置文件
- rust - `method`sub` 的 trait 类型不兼容(可以为不同的结构实现 sub 吗?)
- xamarin.forms - 如何在 F# Xamarin.Forms 应用程序中使用 C# 任务?