2017-01-10 7 views
1

これは私にとって本当に面倒です。私はdjangoとpython 2.7で動作する電報ボットを持っています。開発中、私はdjango sslserverを使いました。今日私はそれをnginxのgunicornを使って配備しました。コードはlocalhostとはまったく異なっています。私はすでにユーザーを始めてからすべてのことを試してみましたが、役に立たなかったのです。ほとんどのPythonオブジェクトは、リクエストごとに状態が失われてしまい、問題を引き起こしている可能性があります。私が使用しているライブラリには、テレグラムユーザーとの会話を処理するクラスがあり、会話の状態はクラスインスタンスに格納されます。新しいリクエストが来ると、それらの値はすでに失われていることがあります。誰もこれに直面していますか?問題を迅速に解決する方法はありますか?私は重大な状況にあり、迅速な解決策を必要としています。nginxでリクエストごとにPythonオブジェクトが状態を失う

+4

gunicornは、プレフォークワーカーモデルを使用します。 Prefork。 **あなたは独立したプロセス**の束を持っています。独立している、つまり彼ら自身の状態を持ち、お互いに記憶を共有していないことを意味する。中央の店舗(redis、&c)と通信するためのシステムを構築していない場合、描画ボードに戻る必要があります。 –

+0

@ Charles Duffy、私はデータベースを持っていますが、私が使用しているライブラリは状態を保存しているようです。さらに、私はガンコーンについてこれを知らなかった – Ken

+1

現時点では、ワーカー数を1に減らすことができます。パフォーマンスは低下しますが、全く機能しないサービスを提供するよりも優れています。 –

答えて

2

Gunicornは、プリフォークワーカーモデルを備えています。つまり、負荷のサブセットを処理する複数の独立したサブプロセスを起動します。

サービスの提供に関連するすべてのスレッドで内部アプリケーションの状態が一貫していることを頼りにしている場合は、これらのスレッドがすべて同じプロセス内にあるように、ワーカー数を1に減らします。もちろん


、これは一時しのぎです - あなたは、生産負荷に実行するようにソリューションを拡張することができるようにしたい、またはアプリケーションをバックアップする複数のサーバを持っている場合、あなたはあなたのシステムを変更することをお勧めしますプロセス内で利用可能なコンテンツに頼るのではなく、関連する状態を共有ストアに保持することができます。

関連する問題