小编mat*_*tox的帖子

用于 ML 预测的 Celery 任务在执行中挂起

我正在尝试创建一个 Web 应用程序,该应用程序接收来自 POST 请求的输入,并根据该输入提供一些 ML 预测。

由于预测模型相当繁重,我不希望用户等待计算完成。相反,我将大量计算委托给 Celery 任务,用户可以稍后检查结果。

我正在使用带有 Celery、Redis 和 Flower 的简单 Flask 应用程序。

我的view.py

@ns.route('predict/')
class Predict(Resource):
    ...
    def post(self):
        ...
        do_categorize(data)
        return jsonify(success=True)
Run Code Online (Sandbox Code Playgroud)

我的tasks.py文件看起来像这样:

from ai.categorizer import Categorizer
categorizer = Categorizer(
    model_path='category_model.h5',
    tokenizer_path='tokenize.joblib',
    labels_path='labels.joblib'
)


@task()
def do_categorize(data):
    result = categorizer.predict(data)
    print(result)
    # Write result to the DB
    ...
Run Code Online (Sandbox Code Playgroud)

我在课堂predict()上的方法Categorizer

def predict(self, value):
    K.set_session(self.sess)
    with self.sess.as_default():
        with self.graph.as_default():
            prediction = self.model.predict(np.asarray([value], dtype='int64'))
            return prediction
Run Code Online (Sandbox Code Playgroud)

我像这样运行芹菜:

celery worker …
Run Code Online (Sandbox Code Playgroud)

machine-learning redis celery flask tensorflow

6
推荐指数
1
解决办法
1438
查看次数

Firestore Cloud Function 空集合

我有一个问题困扰了我好几天。我正在尝试创建一个从 Firestore 数据库读取的 Firebase Cloud 函数。

我的 Firestore 数据库如下所示:

在此输入图像描述

问题是我不能users这样列出:

db.collection('users').get().then((snapshot) => snapshot.forEach(...));
Run Code Online (Sandbox Code Playgroud)

如果我尝试这样做,我会得到空响应,就像我的集合中没有用户一样users

但我尝试直接访问用户,它有效:

await db.collection('users/5CZxgu8nmNXu2TgplwOUdOIt8e33/receipts').get()
Run Code Online (Sandbox Code Playgroud)

我的完整代码:

import * as functions from 'firebase-functions';

const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);

exports.cat = functions.https.onRequest(async (req, res) => {
    const receiptList: any = [];
    const db: Firestore = admin.firestore();

    const usersRef = await db.collection('users').get();
    console.log(usersRef.empty);        // Returns true

    const receiptsRef = await db
        .collection('users/5CZxgu8nmNXu2TgplwOUdOIt8e33/receipts')
        .get();

    receiptsRef.forEach((receipt: any) => {
        console.log(receipt);
        receiptList.push(receipt);
        // Here I can access data
    });

    res.send(receiptList); …
Run Code Online (Sandbox Code Playgroud)

javascript firebase google-cloud-functions google-cloud-firestore

4
推荐指数
3
解决办法
6980
查看次数