私はDjango + uWSGIによってWebサーバーを作成しました。基本的な流れは次のとおりです。要求が受け取られると、DjangoはPythonのビルドインlibでサブスレッドを開始し、dbを非同期に書き込むために「スレッド化」し、メインスレッドではすぐにクライアントに応答します。djangoサブスレッドがuWSGI respawnによって殺されるのを避けるには
どのようにして、uWSGIは時にはワーカープロセスを再生成します(プロセスによって要求が処理されない場合もあります)。バックグラウンドサブスレッドはまだ終了していなくても終了します。 uWSGIが実行中のサブスレッドを持つワーカープロセスを再生成しないようにする手掛かりはありますか?
uWSGIの復活・ログ:
DAMN ! worker 4 (pid: 31161) died, killed by signal 9 :(trying respawn ...
uWSGI INI設定(バージョン2.0.12):
[uwsgi]
# Django's wsgi file
wsgi-file = /home/fh/dj_uwsgi/dj_site/dj_site/wsgi.py
master = true
processes = 10
http = :8001
threads = 2
enable-threads = true
http-timeout = 10
max-requests = 5000
chmod-socket = 664
vacuum = true
pidfile = /home/fh/dj_uwsgi/dj_site/uwsgi.pid
daemonize = /home/fh/log/uwsgi_dj.log
ジャンゴ(バージョン1.8)アプリの擬似コード:handlers.pyで
。
import threading
class SubThreadClass(threading.Thread):
daemon = True
def run(self):
# actions to write db
def myHandler():
my_sub_thread = SubThreadClass()
my_sub_thread.start()
in views.py :
from handlers import myHandler
def url_handler(request):
myHandler()
return HttpResponse()
XYの問題のようです。なぜ最初にスレッドを使用していますか? –
こんにちはダニエル、私はXYの問題は何か分かりません。もっと情報を共有してもらえますか?ここでマルチスレッドを使用するのは、できるだけ早くクライアントに応答して、db操作でブロックされないようにするためです。 @DanielRoseman – fehu
http://xyproblem.info/ - つまり、あなたの実際の問題については質問していません。あなたが発見したように、管理していない環境でスレッドを手動で管理することはまれです。 [Celery](http://www.celeryproject.org/)のようなオフラインワーカーシステムを使用してください。 –