小编cos*_*ouc的帖子

在Airflow中创建动态工作流的正确方法

问题

在Airflow中是否有任何方法可以创建工作流程,以便任务数量B.*在任务A完成之前是未知的?我查看了子标记,但看起来它只能用于必须在Dag创建时确定的一组静态任务.

dag会触发工作吗?如果是这样,请你举个例子.

我有一个问题是,在任务A完成之前,无法知道计算任务C所需的任务B的数量.每个任务B.*将需要几个小时来计算,不能合并.

              |---> Task B.1 --|
              |---> Task B.2 --|
 Task A ------|---> Task B.3 --|-----> Task C
              |       ....     |
              |---> Task B.N --|
Run Code Online (Sandbox Code Playgroud)

想法#1

我不喜欢这个解决方案,因为我必须创建一个阻塞的ExternalTask​​Sensor,所有的任务B.*需要2到24小时才能完成.所以我认为这不是一个可行的解决方案.当然有一种更简单的方法吗?或者Airflow不是为此而设计的?

Dag 1
Task A -> TriggerDagRunOperator(Dag 2) -> ExternalTaskSensor(Dag 2, Task Dummy B) -> Task C

Dag 2 (Dynamically created DAG though python_callable in TriggerDagrunOperator)
               |-- Task B.1 --|
               |-- Task B.2 --|
Task Dummy A --|-- Task B.3 --|-----> Task Dummy B
               |     ....     |
               |-- Task B.N --|
Run Code Online (Sandbox Code Playgroud)

编辑1: …

python workflow airflow

66
推荐指数
8
解决办法
2万
查看次数

链(*iter)与chain.from_iterable(iter)之间的差异

我对itertools中所有有趣的迭代器非常着迷,但我遇到的一个困惑是这两个函数之间的区别以及为什么存在chain.from_iterable.

from itertools import chain

def foo(n):
    for i in range(n):
        yield [i, i**2]

chain(*foo(5))

chain.from_iterable(foo(5))
Run Code Online (Sandbox Code Playgroud)

这两个功能有什么区别?

python

10
推荐指数
2
解决办法
685
查看次数

使用 manylinux + auditwheel 打包 pip 轮子 vs. Conda

描述

所以我希望打包一个需要科学库的相当复杂的 python 应用程序。这个问题有点类似于stackoverflow pip vs conda 的讨论,但它没有详细介绍自 2016 年以来 linux 轮子的二进制打包可用的差异。 我已经看到pypi/cryptography使用 manylinux 并通过 pypi 轮子分发二进制文件。另一个包 mpi4py 只发布 conda 的二进制包,只是因为困难。甚至可以说二元轮不适合这项任务。

通过轮子共享库打包与 conda 相比是什么样的?截至 2018 年,通过轮子共享库打包是否值得?

要求

我的包裹需要

  • 开放式
  • fftw3
  • openmpi

我的所有静态二进制文件大约为 100Mb,因此它确实需要很多共享库。许多我还指出,即使对我自己来说,安装也是一种巨大的痛苦......我无法想象尝试自己安装它的人会是什么样子。到目前为止,我有一个可用的 docker 容器。

python conda python-wheel python-manylinux conda-build

7
推荐指数
0
解决办法
451
查看次数

聚合物app-route子路由不会随路由更改而更新

我的问题涉及链接app-route.最初我认为这个bug来自我的应用程序,但我用一个简单的例子重新创建它.问题来自于首先访问与子路由匹配的URL,然后更改路由以使其与子路由不匹配.

我不能使用Polymer cdn基本标记,因为它会改变路由的行为.如果你复制并粘贴代码运行bower init; bower install --save PolymerElements/app-route; python3 -m http.server;它应该运行示例代码.

问题

  1. 单击链接以#/tree/maple导致routeData.collection ='tree',subrouteData.uuid ='maple'.这是正确的,并且表现如预期
  2. 接下来单击链接#/tree导致routeData.collection ='tree',subrouteData.uuid ='maple'.注意没有变化

请注意,即使更改为子路径的路径#/tree 未更新.这是我理解的问题app-route吗?

<!doctype html>
<html lang="en">

<head>
  <meta charset="utf-8">

  <link rel="import" href="./bower_components/app-route/app-route.html">
  <link rel="import" href="./bower_components/app-route/app-location.html">
  <link rel="import" href="./bower_components/polymer/polymer.html">
</head>

<body>
  <x-example></x-example>
</body>

</html>

<dom-module id="x-example">
  <template>
    <style>
    </style>
    <app-location route="{{route}}" use-hash-as-path></app-location>
    <app-route route="{{route}}" pattern="/:collection" data="{{routeData}}" tail="{{subroute}}"></app-route>
    <app-route route="{{subroute}}" pattern="/:uuid" data="{{subrouteData}}"></app-route>

    <h1>Path</h1> 
    <p>route: [[routeData.collection]]</p>
    <p>subroute: [[subrouteData.uuid]]</p>

    Visit: [In Order]
    <a href="#/tree/maple">[2] …
Run Code Online (Sandbox Code Playgroud)

javascript polymer polymer-1.0

6
推荐指数
1
解决办法
1317
查看次数

每个功能或每个模块的Python记录器

我正在尝试开始使用python登录,并且已经阅读了多个博客。对我造成困扰的一个问题是是按功能还是按模块创建记录器。在本博客:Python中的良好日志记录实践中,建议为每个函数获取一个日志记录器。例如:

import logging

def foo():
    logger = logging.getLogger(__name__)
    logger.info('Hi, foo') 

class Bar(object):
    def __init__(self, logger=None):
        self.logger = logger or logging.getLogger(__name__)

    def bar(self):
        self.logger.info('Hi, bar')
Run Code Online (Sandbox Code Playgroud)

给出的理由是

logging.fileConfig和logging.dictConfig默认情况下禁用现有的记录器。因此,文件中的那些设置将不会应用于您的记录器。最好在需要时获取记录器。创建或获取记录器很便宜。

推荐的阅读方式如下所示。该博客指出了这种方法"looks harmless, but actually, there is a pitfall"

import logging
logger = logging.getLogger(__name__)

def foo():
    logger.info('Hi, foo') 

class Bar(object):
    def bar(self):
        logger.info('Hi, bar')
Run Code Online (Sandbox Code Playgroud)

我发现前一种方法很繁琐,因为我必须记住要在每个函数中使用记录器。另外,使记录器具有每个功能肯定比每个模块一次昂贵。博客的作者提倡非问题吗?遵循日志记录最佳做法是否可以避免此问题?

python logging

6
推荐指数
1
解决办法
2176
查看次数

Numpy np.array 与 dtype TypeError

描述

我花了大约一个小时试图找出 numpy 数组构造错误。我一定没有正确使用 numpy dtypes,但错误消息的描述性不够,并且没有提供足够好的堆栈跟踪来查找错误。

创建相同错误的简化示例

 import numpy as np
 names = ['id', 'x']
 formats = [np.int64, np.float64]
 np.array([1, 1.0], dtype={'names': names, 'formats': formats})
Run Code Online (Sandbox Code Playgroud)

以下代码会导致错误

 ----> 1 np.array([1, 1.0], dtype={'names': names, 'formats': formats})
 TypeError: a bytes-like object is required, not 'int'
Run Code Online (Sandbox Code Playgroud)

所以我知道错误是由于第一个元素是 int 而发生的,但为什么它需要一个类似字节的对象?

答:这与第一个元素是 int 无关。该列表需要是一个元组,如下所示。

python numpy

3
推荐指数
1
解决办法
6365
查看次数