由于Postgres能够进行LATERAL连接,我一直在阅读它,因为我目前为我的团队执行复杂的数据转储,其中包含大量低效的子查询,这使得整个查询需要四分钟或更长时间.
我知道LATERAL联接可能能够帮助我,但即使在阅读了像Heap Analytics 这样的文章之后,我仍然没有完全遵循.
LATERAL加入的用例是什么?LATERAL连接和子查询之间有什么区别?
我们已经为我们的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下降):

我认为理论上我可以减少枪支工人的数量(它默认为4),但我不确定所有的/usr/bin/dockerd过程是什么.如果Docker使事情变得复杂,我可以删除它,但它使更改的部署变得非常简单,如果可能的话我宁愿不删除它.
我正在尝试从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.
我一直在阅读Heroku的文档,但发现它很容易让人困惑.我有一个应用程序,它既有一个基于Web的前端(带有Web进程),也有一个任务设置为每天午夜由Heroku Scheduler运行(显示heroku ps为run.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任务是否被视为后台任务?
主要问题:这会花钱吗?
我在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) 我对此做了大量的研究,我很惊讶我还没有找到一个好的答案.
我正在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) 令我惊讶的是,我没有在其他地方找到这个问题.简短版本,我正在编写一个我计划部署到云端的应用程序(可能使用Heroku),它将进行各种网络抓取和数据收集.它将在云中的原因是我可以将它设置为每天运行并将数据拉到其数据库而不用我的计算机,以及团队的其他成员可以访问数据.
我以前使用AWS的SimpleDB和DynamoDB,但我发现SDB的存储限制很小,DDB的查询能力很差,所以我正在寻找一个可以存储任意长度值的数据库系统(SQL或NoSQL) (理想情况下是任意数据结构),可以在任何字段上查询.
我已经为Heroku找到了许多数据库解决方案,比如ClearDB,但我看到的所有信息都显示了如何设置Django来访问数据库.由于这是脚本而不是网站,如果我不需要,我真的不想深入Django.
在没有使用Django的情况下,我可以使用Python在Heroku中连接任何类型的数据库吗?
有没有人知道任何Python库,它允许你简单快速地将它嵌套到任意级别的对象,例如沿着你在这个要点中找到的行的dict树,它可以吐出一个可行的树图形文件?
简单是关键,因为我必须能够与那些没有技术头脑的人一起工作.
我所说的"图树"是指下面的内容,我可以在其中提供一个嵌套的值字典,然后它将创建树结构:
在Django 1.6中,我已经定义了一个自定义用户模型,但出于某种原因,现在当我创建一个超级用户并尝试获取它或以超级用户身份访问Django管理员时,我得到了这个ValueError: Too many values to unpack.我已经仔细阅读了关于这个错误的许多类似的问题,并没有发现任何适合我的特定问题.我无法弄清楚会出现什么问题.
在自定义管理器中的自定义create_user和create_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) 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 ×7
heroku ×4
django ×3
airflow ×1
amazon-ec2 ×1
celery ×1
database ×1
dictionary ×1
django-1.6 ×1
django-1.7 ×1
docker ×1
graph ×1
lateral-join ×1
popen ×1
postgresql ×1
process ×1
rabbitmq ×1
redis ×1
scheduler ×1
sigterm ×1
sql ×1
subquery ×1
tree ×1