uwsgi: RuntimeError: cannot release un-acquired lock
uwsgi: RuntimeError: cannot release un-acquired lock
我是 运行 uwsgi(django 在 docker 容器中),每个生成的 worker 都会出现此错误:
spawned uWSGI master process (pid: 1)
web_1 | spawned uWSGI worker 1 (pid: 18, cores: 2)
web_1 | Exception ignored in: <function _after_at_fork_child_reinit_locks at 0x7fd944954ca0>
web_1 | Traceback (most recent call last):
web_1 | File "/usr/local/lib/python3.8/logging/__init__.py", line 260, in _after_at_fork_child_reinit_locks
web_1 | spawned uWSGI worker 2 (pid: 19, cores: 2)
web_1 | _releaseLock() # Acquired by os.register_at_fork(before=.
web_1 | File "/usr/local/lib/python3.8/logging/__init__.py", line 228, in _releaseLock
web_1 | _lock.release()
web_1 | RuntimeError: cannot release un-acquired lock
这是我的 uwsgi .ini 文件:
[uwsgi]
strict = true ; only explicitly understood configration allowed
module = myapp.wsgi
need-app = true ; don't start if can't find or load django app
### PROCESS SETTINGS ###############
master = true ; gracefully re-spawn and pre-fork workers, consolidate logs, etc
enable-threads = true
processes = 10 ; maximum number of worker processes
threads = 2
thunder-lock = true
socket = 0.0.0.0:8000 ; too complicated for me to get a unix socket to work with docker, this is fine.
#socket = /tmp/myapp.sock
vacuum = true ; on exit, clean up any temporary files or UNIX sockets it created, such as HTTP sockets, pidfiles, or admin FIFOs
single-interpreter = true
die-on-term = true
### WORKER MANAGEMENT ##########
max-requests = 1000 ; Restart workers after this many requests
max-worker-lifetime = 3600 ; Restart workers after this many seconds
reload-on-rss = 2048 ; Restart workers after this much resident memory
worker-reload-mercy = 60 ; How long to wait before forcefully killing workers
harakiri = 60 ; Forcefully kill workers after 60 seconds
py-call-osafterfork = true ; Allow workers to receive signals such as signal.alarm
### LOGGING ####################
disable-logging = true ; Disable built-in logging
log-4xx = true ; but log 4xx's anyway
log-5xx = true ; and 5xx's
#log-to = /var/log/uwsgi.uwsgi.log
我该如何解决这个问题?我是不是少了一个包裹?
我的 Docker 文件使用 python:3.8-slim
但同样的事情发生在 3.7-slim
Docker文件 添加包:
RUN apt-get update \
&& apt-get -y install --no-install-recommends apt-utils 2>&1
# Install git, process tools, lsb-release (common in install instructions for CLIs)
RUN apt-get install -y git procps lsb-release
# Required for psycopg2: https://github.com/psycopg/psycopg2/issues/699
RUN apt-get install -y --no-install-recommends libpq-dev
# Install any missing dependencies for enhanced language service
RUN apt-get install -y libicu[0-9][0-9]
# Install uwsgi
RUN apt-get install -y build-essential
RUN pip install uwsgi
尝试删除 py-call-osafterfork
uwsgi 配置选项。
尝试启用 Gevent compatible
Settings -> Build, Execution, Deployment -> Python Debugger
它帮助了我。
我是 运行 uwsgi(django 在 docker 容器中),每个生成的 worker 都会出现此错误:
spawned uWSGI master process (pid: 1)
web_1 | spawned uWSGI worker 1 (pid: 18, cores: 2)
web_1 | Exception ignored in: <function _after_at_fork_child_reinit_locks at 0x7fd944954ca0>
web_1 | Traceback (most recent call last):
web_1 | File "/usr/local/lib/python3.8/logging/__init__.py", line 260, in _after_at_fork_child_reinit_locks
web_1 | spawned uWSGI worker 2 (pid: 19, cores: 2)
web_1 | _releaseLock() # Acquired by os.register_at_fork(before=.
web_1 | File "/usr/local/lib/python3.8/logging/__init__.py", line 228, in _releaseLock
web_1 | _lock.release()
web_1 | RuntimeError: cannot release un-acquired lock
这是我的 uwsgi .ini 文件:
[uwsgi]
strict = true ; only explicitly understood configration allowed
module = myapp.wsgi
need-app = true ; don't start if can't find or load django app
### PROCESS SETTINGS ###############
master = true ; gracefully re-spawn and pre-fork workers, consolidate logs, etc
enable-threads = true
processes = 10 ; maximum number of worker processes
threads = 2
thunder-lock = true
socket = 0.0.0.0:8000 ; too complicated for me to get a unix socket to work with docker, this is fine.
#socket = /tmp/myapp.sock
vacuum = true ; on exit, clean up any temporary files or UNIX sockets it created, such as HTTP sockets, pidfiles, or admin FIFOs
single-interpreter = true
die-on-term = true
### WORKER MANAGEMENT ##########
max-requests = 1000 ; Restart workers after this many requests
max-worker-lifetime = 3600 ; Restart workers after this many seconds
reload-on-rss = 2048 ; Restart workers after this much resident memory
worker-reload-mercy = 60 ; How long to wait before forcefully killing workers
harakiri = 60 ; Forcefully kill workers after 60 seconds
py-call-osafterfork = true ; Allow workers to receive signals such as signal.alarm
### LOGGING ####################
disable-logging = true ; Disable built-in logging
log-4xx = true ; but log 4xx's anyway
log-5xx = true ; and 5xx's
#log-to = /var/log/uwsgi.uwsgi.log
我该如何解决这个问题?我是不是少了一个包裹?
我的 Docker 文件使用 python:3.8-slim
但同样的事情发生在 3.7-slim
Docker文件 添加包:
RUN apt-get update \
&& apt-get -y install --no-install-recommends apt-utils 2>&1
# Install git, process tools, lsb-release (common in install instructions for CLIs)
RUN apt-get install -y git procps lsb-release
# Required for psycopg2: https://github.com/psycopg/psycopg2/issues/699
RUN apt-get install -y --no-install-recommends libpq-dev
# Install any missing dependencies for enhanced language service
RUN apt-get install -y libicu[0-9][0-9]
# Install uwsgi
RUN apt-get install -y build-essential
RUN pip install uwsgi
尝试删除 py-call-osafterfork
uwsgi 配置选项。
尝试启用 Gevent compatible
Settings -> Build, Execution, Deployment -> Python Debugger
它帮助了我。