小编jdo*_*dot的帖子

LATERAL和PostgreSQL中的子查询有什么区别?

由于Postgres能够进行LATERAL连接,我一直在阅读它,因为我目前为我的团队执行复杂的数据转储,其中包含大量低效的子查询,这使得整个查询需要四分钟或更长时间.

我知道LATERAL联接可能能够帮助我,但即使在阅读了像Heap Analytics 这样的文章之后,我仍然没有完全遵循.

LATERAL加入的用例是什么?LATERAL连接和子查询之间有什么区别?

sql postgresql subquery lateral-join

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

Airbnb Airflow使用所有系统资源

我们已经为我们的ETL设置了Airbnb/Apache Airflow LocalExecutor,并且当我们开始构建更复杂的DAG时,我们注意到Airflow已经开始使用大量的系统资源.这对我们来说是令人惊讶的,因为我们主要使用Airflow来协调在其他服务器上发生的任务,因此Airflow DAG花费大部分时间等待它们完成 - 在本地没有实际执行.

最大的问题是Airflow似乎在任何时候都占用了100%的CPU(在AWS t2.medium上),并使用超过2GB的内存和默认的airflow.cfg设置.

如果相关,我们使用docker-compose运行容器两次运行Airflow; 曾经scheduler和曾经一样webserver.

我们在这做错了什么?这是正常的吗?

编辑: 这是输出htop,由%Memory使用排序(因为这似乎是现在的主要问题,我有CPU下降): HTOP Htop2

我认为理论上我可以减少枪支工人的数量(它默认为4),但我不确定所有的/usr/bin/dockerd过程是什么.如果Docker使事情变得复杂,我可以删除它,但它使更改的部署变得非常简单,如果可能的话我宁愿不删除它.

amazon-ec2 docker airflow

31
推荐指数
3
解决办法
7012
查看次数

从Python启动一个完全独立的过程

我正在尝试从python启动一个完全独立的进程.我不能使用像os.startfile这样简单的东西,因为我需要传递参数.目前我正在使用subprocess.popen,它让我90%的方式.

args = ["some_exe.exe", "some_arg", "another_arg"]
subprocess.Popen(args, creationflags=DETACHED_PROCESS | CREATE_NEW_PROCESS_GROUP, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)
Run Code Online (Sandbox Code Playgroud)

使用带有分离创建标志和std*管道的popen会启动一个新进程,该进程在父进程终止后继续存在.这一切都很好.问题是新的'子'进程仍然保留了父进程的幻象句柄.因此,如果我尝试卸载父exe(我的python脚本通过pyinstaller捆绑到exe),msiexec抱怨父exe仍在使用中.

因此,目标是生成一个完全独立的进程来运行"some_exe.exe",它没有任何句柄回原始进程.

注意:这适用于Windows XP及更高版本.我正在开发Win7.

python windows-installer popen

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

Heroku Scheduler任务需要花钱吗?

我一直在阅读Heroku的文档,但发现它很容易让人困惑.我有一个应用程序,它既有一个基于Web的前端(带有Web进程),也有一个任务设置为每天午夜由Heroku Scheduler运行(显示heroku psrun.1).

所以,我heroku ps看起来像这样:

Process  State       Command
-------  ----------  ------------------------------------
run.1    up for 21h  python webpage/listings.py
web.1    up for 8m   python ./manage.py runserver 0.0.0..
Run Code Online (Sandbox Code Playgroud)

我想弄清楚的是,这被认为是两个dynos?该run任务是否被视为后台任务?

主要问题:这会花钱吗?

process scheduler heroku

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

仅使用1个web dyno和0个工作dynos运行Heroku后台任务

我在Heroku上有一个Python Flask应用程序,用于提供网页,但也允许启动某些任务,我相信这些任务最适合作为后台任务.因此,我遵循Heroku rq教程来设置后台任务.我的Procfile看起来像这样:

web: python app.py
worker: python worker.py
Run Code Online (Sandbox Code Playgroud)

但是,我的流程目前正在扩展web=1 worker=0.鉴于这种背景过程不会经常运行,我似乎不明智地为它配置一个完整的dyno然后为那么小的东西支付34美元/月.

题:

  • 如果我将worker进程保留在我的Procfile中但是保持扩展web=1 worker=0,那么我的排队进程最终会在我的可用web dyno 上运行吗?或者排队的进程永远不会运行?
  • 如果排队的进程永远不会运行,还有另一种方法可以做到这一点,例如,twisted在我的Web应用程序中使用异步运行任务吗?

附加信息

worker.py 看起来像这样:

import os
import redis
from rq import Worker, Queue, Connection

listen = ['high', 'default', 'low']

redis_url = os.getenv('REDISTOGO_URL', 'redis://localhost:6379')

conn = redis.from_url(redis_url)

if __name__ == '__main__':
    with Connection(conn):
        worker = Worker(map(Queue, listen))
        worker.work()
Run Code Online (Sandbox Code Playgroud)

排队进程的主应用程序中的逻辑如下所示:

from rq import Queue
from worker import conn
q = Queue(connection=conn)

q.enqueue(myfunction, myargument)
Run Code Online (Sandbox Code Playgroud)

python heroku redis

23
推荐指数
1
解决办法
7433
查看次数

在Celery工作者中捕获Heroku SIGTERM以优雅地关闭工作人员

我对此做了大量的研究,我很惊讶我还没有找到一个好的答案.

我正在Heroku上运行一个大型应用程序,我有一些芹菜任务运行了很长时间的处理,并在任务结束时保存结果.每次我在Heroku上重新部署时,它都会发送SIGTERM(最终是SIGKILL)并杀死我的跑步工作者.我正在尝试找到一种方法让worker实例优雅地自行关闭并重新排队以便稍后处理,这样最终我们可以保存所需的结果而不是丢失排队的任务.

我找不到一种让工作人员正确地监听SIGTERM的方法.我得到的最接近的,在python manage.py celeryd直接运行时有效但在使用工头模拟Heroku时没有,如下:

@app.task(bind=True, max_retries=1)
def slow(self, x):
    try:
        for x in range(100):
            print 'x: ' + unicode(x)
            time.sleep(10)
    except exceptions.MaxRetriesExceededError:
        logger.error('whoa')
    except (exceptions.WorkerShutdown, exceptions.WorkerTerminate) as exc:
        logger.error(u'retrying, ' + unicode(exc))
        raise self.retry(exc=exc, countdown=10)
    except (KeyboardInterrupt, SystemExit) as exc:
        print 'retrying'
        raise self.retry(exc=exc, countdown=10)
    else:
        return x
    finally:
        logger.info('task ended!')
Run Code Online (Sandbox Code Playgroud)

当我开始在领班内运行芹菜任务并按Ctrl + C时,会发生以下情况:

^CSIGINT received
22:20:59 system   | sending SIGTERM to all processes
22:20:59 web.1    | exited with code 0
22:21:04 system   | sending …
Run Code Online (Sandbox Code Playgroud)

python heroku rabbitmq celery sigterm

19
推荐指数
1
解决办法
1518
查看次数

没有使用Django的Python数据库(用于Heroku)

令我惊讶的是,我没有在其他地方找到这个问题.简短版本,我正在编写一个我计划部署到云端的应用程序(可能使用Heroku),它将进行各种网络抓取和数据收集.它将在云中的原因是我可以将它设置为每天运行并将数据拉到其数据库而不用我的计算机,以及团队的其他成员可以访问数据.

我以前使用AWS的SimpleDB和DynamoDB,但我发现SDB的存储限制很小,DDB的查询能力很差,所以我正在寻找一个可以存储任意长度值的数据库系统(SQL或NoSQL) (理想情况下是任意数据结构),可以在任何字段上查询.

我已经为Heroku找到了许多数据库解决方案,比如ClearDB,但我看到的所有信息都显示了如何设置Django来访问数据库.由于这是脚本而不是网站,如果我不需要,我真的不想深入Django.

在没有使用Django的情况下,我可以使用Python在Heroku中连接任何类型的数据库吗?

python database django heroku

14
推荐指数
2
解决办法
4095
查看次数

用于从嵌套Python对象(dicts)创建树图的Python库

有没有人知道任何Python库,它允许你简单快速地将它嵌套到任意级别的对象,例如沿着你在这个要点中找到的行的dict树,它可以吐出一个可行的树图形文件?

简单是关键,因为我必须能够与那些没有技术头脑的人一起工作.

我所说的"图树"是指下面的内容,我可以在其中提供一个嵌套的值字典,然后它将创建树结构:

http://dhaka.rubyforge.org/parse_tree.jpg

python tree dictionary graph

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

Django:调用user.objects.get()时"解压缩的值太多"

在Django 1.6中,我已经定义了一个自定义用户模型,但出于某种原因,现在当我创建一个超级用户并尝试获取它或以超级用户身份访问Django管理员时,我得到了这个ValueError: Too many values to unpack.我已经仔细阅读了关于这个错误的许多类似的问题,并没有发现任何适合我的特定问题.我无法弄清楚会出现什么问题.

在自定义管理器中的自定义create_usercreate_superuser方法中,我确实传递了一个额外的字段,但该字段实际上并没有进入模型,因此我无法理解为什么会导致问题.

此外,当尝试访问管理员时,我得到一个稍微不同的错误:AttributeError: 'UserObject' has no attribute 'has_module_perms'.

完全追溯:

Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "C:\Users\JJ\Coding\virtualenvs\TCR5venv\lib\site-packages\django\db\models\manager.py", line 151, in get
    return self.get_queryset().get(*args, **kwargs)
  File "C:\Users\JJ\Coding\virtualenvs\TCR5venv\lib\site-packages\django\db\models\query.py", line 298, in get
    clone = self.filter(*args, **kwargs)
  File "C:\Users\JJ\Coding\virtualenvs\TCR5venv\lib\site-packages\django\db\models\query.py", line 590, in filter
    return self._filter_or_exclude(False, *args, **kwargs)
  File "C:\Users\JJ\Coding\virtualenvs\TCR5venv\lib\site-packages\django\db\models\query.py", line 608, in _filter_or_exclude
    clone.query.add_q(Q(*args, **kwargs))
  File "C:\Users\JJ\Coding\virtualenvs\TCR5venv\lib\site-packages\django\db\models\sql\query.py", line 1198, in add_q
    clause = self._add_q(where_part, …
Run Code Online (Sandbox Code Playgroud)

python django django-models django-1.6

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

Django 1.7 makemigrations freezing/hanging

I'm finally upgrading from Django 1.6 to 1.7, and removing South in the process. I followed the official Django instructions and removed all my old numbered migrations. Now I'm trying to run python manage.py makemigrations to get the new migrations to continue moving forward with 1.7's migrations module, but it completely hangs and the only output I get is the following:

bash -cl "/Users/me/.virtualenvs/mysite-Dj17/bin/python /Applications/PyCharm.app/Contents/helpers/pycharm/django_manage.py makemigrations /Users/me/Coding/mysite"
/Users/me/.virtualenvs/mysite-Dj17/lib/python2.7/site-packages/django/test/_doctest.py:59: RemovedInDjango18Warning: The django.test._doctest module is deprecated; use the doctest module from the …
Run Code Online (Sandbox Code Playgroud)

python django django-1.7 django-migrations

11
推荐指数
1
解决办法
2629
查看次数