gpt4 book ai didi

python - 如何避免Django子线程被uWSGI respawn杀死

转载 作者:行者123 更新时间:2023-12-01 03:33:32 28 4
gpt4 key购买 nike

我通过 Django + uWSGI 创建了一个 Web 服务器。基本流程是:当收到请求时,Django将通过python内置lib“Threading”启动一个子线程异步写入数据库,并在主线程中立即响应回客户端。

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

Django(版本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()

在views.py中:

from handlers import myHandler

def url_handler(request):
myHandler()
return HttpResponse()

最佳答案

在您无法管理的环境中,手动处理线程很少是一个好主意。

您应该使用离线工作系统,例如 Celery .

关于python - 如何避免Django子线程被uWSGI respawn杀死,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40589691/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com