2

タスクにカウントダウンを追加しようとしていますが、うまくいきません。

これが私が使用しているコードです

@celery.task
def check_st(key, t):
    device = Device.query.filter(Device.key == key).first()
    data = Data.query.filter(Data.dev_id == device.id).order_by(Data.timestamp.desc()).first()
    if(data.timestamp == t):
        return True

そして私はそれをそのように呼んでいます

check_st.apply_async([key, data.timestamp], countdown=300)

完全なセロリのログから取得。

何か案は?

編集

カウントダウンで簡単な例をテストするとうまくいくようです。セロリの実行方法と組み合わせて問題を引き起こすのは、プロジェクトのレイアウトだと思います。

だから私のレイアウトはこのようなものです

proj(app( __init__.py, views.py, models.py, tasks.py))

私の tasks.py では、このようなモジュールをインポートします

from app.models import Device, Data

次に、views.py で、次を使用してタスクをインポートします

from app.tasks import check_st

proj/そして、このようなディレクトリでセロリを実行します

celery -A app.tasks worker -l info

他のすべてのタスクはこのセットアップで期待どおりに機能しますが、countdown キーワードを追加すると、次のようになります

Task app.tasks.check_st[deffd607-c6d4-41af-882c-e111736888ba] raised exception: TypeError("check_st() got an unexpected keyword argument 'countdown'",)
4

1 に答える 1

1

問題は最終的に解決されました。解決策は変更することによってもたらされました

celery -A app.tasks worker -l info

celery --workdir=proj/ -A app.tasks worker -l info
于 2013-03-15T20:59:18.983 に答える