小编Zoh*_*eir的帖子

如何让 PyC​​harm 识别自定义属性装饰器?

让我们考虑以下示例类:

class Foo:
    def __init__(self):
        self._bar = None

    @property
    def bar(self):
        if self._bar is None:
            self._bar = ...  # a long computation
        return self._bar
Run Code Online (Sandbox Code Playgroud)

我创建了一个cachedproperty装饰器来隐式地将计算结果存储为类实例的成员。这是此类装饰器类的简化示例:

class cachedproperty(property):
    def __init__(self, fget):
        @functools.wraps(fget)
        def cfget(obj):
            name = '_' + fget.__name__
            if not hasattr(obj, name):
                setattr(obj, name, fget(obj))
            return getattr(obj, name)
        super().__init__(cfget)
Run Code Online (Sandbox Code Playgroud)

现在类Foo看起来像这样:

class Foo:
    @cachedproperty
    def bar(self):
        return ...  # a long computation
Run Code Online (Sandbox Code Playgroud)

即使它有效,但 PyCharm 现在无法将其bar视为 的属性Foo,而是将其视为方法,这有点不方便。例如,这可以在自动完成下拉菜单中看到:

使用 @property 装饰器自动完成 Foo.bar

使用 @cachedproperty 装饰器自动完成 Foo.bar

我的问题是:如何强制 PyCharm 将我的自定义属性装饰器视为实际属性?

python properties pycharm python-3.x python-decorators

7
推荐指数
1
解决办法
383
查看次数

Apache Spark:如何取消代码中的作业并终止正在运行的任务?

我正在 Hadoop 集群上运行 Spark 应用程序(版本 1.6.0),并在客户端模式下使用 Yarn(版本 2.6.0)。我有一段运行长时间计算的代码,如果它花费的时间太长,我想杀死它(然后运行一些其他函数)。
这是一个例子:

val conf = new SparkConf().setAppName("TIMEOUT_TEST")
val sc = new SparkContext(conf)
val lst = List(1,2,3)
// setting up an infite action
val future = sc.parallelize(lst).map(while (true) _).collectAsync()

try {
    Await.result(future, Duration(30, TimeUnit.SECONDS))
    println("success!")
} catch {
    case _:Throwable =>
        future.cancel()
        println("timeout")
}

// sleep for 1 hour to allow inspecting the application in yarn
Thread.sleep(60*60*1000)
sc.stop()
Run Code Online (Sandbox Code Playgroud)

超时设置为 30 秒,但当然计算是无限的,因此等待 future 的结果将抛出异常,该异常将被捕获,然后 future 将被取消并执行备份函数。
这一切都运行得很好,只是取消的作业没有完全终止:当查看应用程序的 Web UI 时,作业被标记为失败,但我可以看到内部仍然有正在运行的任务。

当我使用 SparkContext.cancelAllJobs 或 SparkContext.cancelJobGroup 时,也会发生同样的情况。问题是,即使我设法继续执行我的程序,已取消作业的正在运行的任务仍然占用宝贵的资源(这最终会让我的速度几乎停止)。 …

hadoop scala hadoop-yarn apache-spark

5
推荐指数
1
解决办法
1万
查看次数