use*_*901 1 python multithreading multiprocessing celery flask
我有一些蜘蛛下载页面并将数据存储在数据库中.我创建了使用管理面板(由Flask-Admin扩展)显示数据库的烧瓶应用程序.现在我想将功能附加到我的烧瓶应用程序以控制蜘蛛状态:打开/关闭.
我觉得它可以通过线程或多处理来实现.Celery不是一个好的决定,因为总计划必须使用最少的内存.
选择哪种方法来实现这个功能?
根据内存使用情况对Celery进行折扣可能是一个错误,因为Celery的时间和空间开销都很低.事实上,使用Celery + Flask并不比仅使用Flask使用更多的内存.
此外,Celery还提供了多种选择,可以对使用的内存量产生影响.例如,有5种不同的池实现都具有不同的优势和权衡,池选择是:
默认情况下,Celery使用多处理,这意味着它将生成子进程以卸载工作.这是内存最昂贵的选项 - 只是因为每个子进程都会复制所需的基本内存量.
不过,芹菜还配备了一个自动缩放功能,它会扼杀工作进程时,有什么工作要做,并生成新的进程,当有更多的工作:
$ celeryd --autoscale=0,10
Run Code Online (Sandbox Code Playgroud)
其中0是最小进程数,10是最大进程数.在这里,celeryd将从没有子进程开始,并根据最多10个进程的负载增长.当负载减少时,工作进程数也会减少.
使用eventlet/gevent池时,只使用一个进程,因此它将使用更少的内存,但缺点是调用阻塞代码的任务将阻止执行其他任务.如果您的任务主要是I/O绑定,那么您应该没问题,并且您还可以组合不同的池并将问题任务发送到多处理池.
芹菜还配有一个使用线程的游泳池.
将成为2.6版的开发版本包含许多优化,并且不再需要Flask-Celery扩展模块.如果您未在未来几天投入生产,那么我建议您尝试必须安装的开发版本,如下所示:
$ pip install https://github.com/ask/kombu/zipball/master
$ pip install https://github.com/ask/celery/zipball/master
Run Code Online (Sandbox Code Playgroud)
新的API现在也受到了Flask的启发,因此您应该阅读新的入门指南:
http://ask.github.com/celery/getting-started/first-steps-with-celery.html
尽管如此,到目前为止,大多数优化工作都集中在执行速度上,并且可能会有更多的内存优化.到目前为止,这并不是一个请求,但是在不太可能的情况下,Celery不符合您的内存限制,您可以在我们的错误跟踪器中打开一个问题,我相信它会得到关注,或者您甚至可以帮助我们这样做.
| 归档时间: |
|
| 查看次数: |
2017 次 |
| 最近记录: |