管理来自Heroku的对Django的长时间运行请求

2024-09-29 19:29:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我在一个分布式系统上工作,在这个系统中,我有一个安装在heroku上的应用程序,通过安装在EC2 ubuntu实例上的django从第二个“API”发出请求。昨天我犯了很多错误,在混乱之后:

我查看了EC2 nginx日志,在那里我看到:

SIGPIPE: writing to a closed pipe/socket/fd (probably the client disconnected) on request /i/ 

做一个:

^{pr2}$

给予

←[35m2015-03-15T01:31:24.778005+00:00 heroku[router]:←[0m at=error code=H12 desc="Request timeout" method=POST path="/i/"   host=myapp.herokuapp.com request_id=459d8925-194f-4d85-a6
ed-a1dc90fb01fb fwd="216.**.**.**" dyno=web.1 connect=1ms service=30004ms status=503 bytes=0

显然,这些H12错误发生在任何耗时超过30秒的heroku请求中(https://devcenter.heroku.com/articles/limits#router)。不幸的是,我的ec2django应用程序需要60秒才能返回响应。在

从包括How to increase Heroku 30s h12 timeout在内的多个源中,我似乎需要修改我的代码,以便heroku请求在ec2django应用程序上触发一个后台进程,然后返回一个即时响应。我以前没有在python/django中使用过异步任务。处理这个问题最简单/最好的方法是什么。在


Tags: todjango实例com应用程序herokurequestubuntu
1条回答
网友
1楼 · 发布于 2024-09-29 19:29:39

哈,你问了一个开放式的问题……与其重写一堆已经写好的东西,不如让我试着给你指出正确的方向

使用Django/Python时,一个很好的标准是celeri。{有关heroku的详细信息,请参见^ a1。一旦您获得了初始设置,就可以简单地用“@task”装饰异步任务并用“.delay()”调用它们。在

您将需要一个用于管理任务的“后备存储器”。heroku指南引导您浏览redis。如果您有一个未充分利用的数据库,并且异步任务的速率非常小,那么您可能希望在生产环境中运行它。除此之外,我发现最便宜的解决方案就是Redis。在

如果你对你的应用程序很轻量级,考虑使用Honcho(参见http://www.radekdostal.com/content/heroku-running-multiple-python-processes-single-dyno-using-honcho

相关问题 更多 >

    热门问题