私は、内部使用のために長年にわたるクエリWebアプリケーションを構築しています。フラスコでのバックグラウンドデーモンの起動
私の目標は、世界的な辞書オブジェクトを更新するサーバーの起動時に起動するデーモンプロセス、フラスコのアプリを持っていることです。
私は、この多くの方法を達成しようとしたとどれも成功していないように私は必ずしも、投稿するすべてのサンプル・コードを持っていません。
デーモンは、すべてのデータベース・インスタンスをループにスレッドプール(multiprocessing.Pool)を作成し、それらの上にカップルのクエリを実行します。
私はこれを(現在、フラスコ開発サーバーを使用して)どのように試して実装しても、アプリケーションをロックし、実行中は何も実行できないようです。私はたくさんのドキュメンテーションを通して読書を試みましたが、いつものように他の多くの知識が仮定され、私は圧倒的に終わります。
私は「フラスコスタートアップルーチン」とそれに類するものを探し求めていますが、何も見つかっていないので、誰かが何かガイダンスを提供できるかどうかは疑問です。これをサーバに配備すると、私の.wsgiファイルにいくつかの起動デーモンを定義することができるかもしれませんが、それまではローカルでこれを行う方法がありますか?私は一般的な使用のためにそれを押し出すとき、それは正しいアプローチですか?
それ以外の場合は、必要なクエリを実行するpythonスクリプトを連続して実行し、MongoDBインスタンスまたは何かにダンプするcronジョブを設定することを考えていました。 Flaskアプリのサーバー側のすべてのクエリはサーバーをロックするだけなので、それ以外は何もできません - 別名:情報に対処できず、スパイダーなどを殺すことはできません)
私の脳は何日も回転しています。
from flask import Flask
from celery import Celery
app = Flask(__name__)
app.config['CELERY_BROKER_URL'] = 'amqp://[email protected]//'
app.config['CELERY_RESULT_BACKEND'] = 'amqp://[email protected]//'
celery = Celery(app.name, broker=app.config['CELERY_BROKER_URL'])
celery.conf.update(app.config)
output = 0
@app.before_first_request
def init():
task = my_task.apply_async()
@app.route('/')
def hello_world():
global output
return 'Hello World! - ' + str(output)
@celery.task
def my_task():
global output
result = 0
for i in range(100):
result += i
output = result
if __name__ == '__main__':
app.run()
スケーリングは、<10人で使用される内部ツールであるため、このような問題はありません。しかし、セロリは面白いオプションのように見えます!それをチェックしましょう! – Jacob
または[RQ](http://python-rq.org/)、これは素晴らしいです。 –
@Jacobスケーリングは今のところ問題ではないかもしれませんが、最初から正しく処理する方が良いです... –