Har*_*han 5 python pickle shared-memory celery scikit-learn
我有一个大约 200MB 的泡菜对象(分类器)。我尝试使用静态成员变量来初始化对象并运行 celery 任务。Celery 创建了大约 8 个新进程,每个进程将对象读入内存并冻结我的计算机。是否有任何共享对象解决方案或解决此问题的任何解决方案。
我正在尝试使用此对象对文章进行分类,并将其保存在 db 中作为后台任务。
编辑。这是我的分类器任务的代码
from model import Article
import cPickle as pkl
from classifierclasses import Remover, Classifier, ItemSelector, PreProcessor
from celery import Celery
app = Celery('tasks', backend='redis://localhost/')
class ClassiferTask(app.Task):
classifier = pkl.load(open('clf.p', 'rb')) #loading classifier object initially (huge file)
def classify(self, article_id, text):
self.prediction = ClassiferTask.classifier.predict([text])[0]
Article.update(prediction=self.prediction, is_analyzed=1).where(Article.id == article_id).execute()
def run(self, id, *args, **kwargs):
self.classify(id, args[0])
Run Code Online (Sandbox Code Playgroud)
当我将此作业提交给 celery 时,它创建了新进程,每个进程都试图读入内存并占用大内存 ~200MB * 8
我怎么解决这个问题?这个问题有没有更好的解决办法。是否有可以共享单个(只读)对象的 celery 任务。
共享内存很棘手。
最好的方法可能是将您的对象存储在某种存储中并重新构造它以允许读/写它的较小部分。
不可能说出如何最好地做到这一点,因为您没有提供有关对象或其接口或结构的详细信息。
| 归档时间: |
|
| 查看次数: |
1299 次 |
| 最近记录: |