Мое докеризованное приложение Django позволяет пользователям загружать файлы (загружаемые непосредственно в мои DigitalOcean Spaces). При тестировании на моем локальном устройстве (и в моем развертывании Heroku) я могу без проблем успешно загружать небольшие файлы. Однако при загрузке больших файлов, например. 200+ МБ, я могу получить эти журналы ошибок:
[2024-09-29 19:00:51 +0000] [1] [CRITICAL] WORKER TIMEOUT (pid:7)
web-1 | [2024-09-29 19:00:52 +0000] [1] [ERROR] Worker (pid:7) was sent SIGKILL! Perhaps out of memory?
web-1 | [2024-09-29 19:00:52 +0000] [29] [INFO] Booting worker with pid: 29
Ошибка возникает примерно через 30 секунд после того, как я попытался загрузить, поэтому я подозреваю, что тайм-аут вызывается из-за пушки после отсутствия ответа. Я не уверен, что делать, чтобы решить эту проблему. кроме увеличения периода ожидания, который, как мне сказали, не рекомендуется. Вот мой загруженный файл обработки кода:
views.py:
@csrf_protect
def transcribe_submit(request):
if request.method == 'POST':
form = UploadFileForm(request.POST, request.FILES)
if form.is_valid():
uploaded_file = request.FILES['file']
request.session['uploaded_file_name'] = uploaded_file.name
request.session['uploaded_file_size'] = uploaded_file.size
session_id = str(uuid.uuid4())
request.session['session_id'] = session_id
try:
transcribed_doc, created = TranscribedDocument.objects.get_or_create(id=session_id)
transcribed_doc.audio_file = uploaded_file
transcribed_doc.save()
...
except Exception as e:
# Log the error and respond with a server error status
print(f"Error occurred: {str(e)}")
return HttpResponse(status=500)
...
else:
return HttpResponse(status=500)
else:
form = UploadFileForm()
return render(request, 'transcribe/transcribe-en.html', {"form": form})
forms.py:
def validate_audio_language(value):
#code to validate audio language
if value not in allowed_languages:
raise ValidationError("Error")
def validate_output_file_type(value):
#code to validate file type
if value not in output_file_type:
raise ValidationError("Error")
class UploadFileForm(forms.Form):
file = forms.FileField(validators=[validate_file])
docker-compose.yml:
#version: "3.9"
services:
web:
build: .
#command: python /code/manage.py runserver 0.0.0.0:8000
command: gunicorn mysite.wsgi -b 0.0.0.0:8000 --reload
volumes:
- .:/code
ports:
- 8000:8000
depends_on:
- db
- redis
- celery
environment:
- "DJANGO_SECRET_KEY="
user: user-me
db:
image: postgres:13
volumes:
- postgres_data:/var/lib/postgresql/data/
environment:
- "POSTGRES_HOST_AUTH_METHOD=trust"
redis:
image: redis:6
ports:
- 6379:6379
celery:
build: .
command: celery -A mysite worker --loglevel=info
volumes:
- .:/code
depends_on:
- redis
- db
environment:
- "DJANGO_SECRET_KEY="
user: user-me
volumes:
postgres_data:
Подробнее здесь: https://stackoverflow.com/questions/790 ... ory-messag
Джанго ` [ОШИБКА] Рабочий (pid:7) был отправлен SIGKILL! Возможно, недостаточно памяти?` сообщение при загрузке больших ⇐ Python
Программы на Python
1727640374
Anonymous
Мое докеризованное приложение Django позволяет пользователям загружать файлы (загружаемые непосредственно в мои DigitalOcean Spaces). При тестировании на моем локальном устройстве (и в моем развертывании Heroku) я могу без проблем успешно загружать небольшие файлы. Однако при загрузке больших файлов, например. 200+ МБ, я могу получить эти журналы ошибок:
[2024-09-29 19:00:51 +0000] [1] [CRITICAL] WORKER TIMEOUT (pid:7)
web-1 | [2024-09-29 19:00:52 +0000] [1] [ERROR] Worker (pid:7) was sent SIGKILL! Perhaps out of memory?
web-1 | [2024-09-29 19:00:52 +0000] [29] [INFO] Booting worker with pid: 29
Ошибка возникает примерно через 30 секунд после того, как я попытался загрузить, поэтому я подозреваю, что тайм-аут вызывается из-за пушки после отсутствия ответа. Я не уверен, что делать, чтобы решить эту проблему. кроме увеличения периода ожидания, который, как мне сказали, не рекомендуется. Вот мой загруженный файл обработки кода:
views.py:
@csrf_protect
def transcribe_submit(request):
if request.method == 'POST':
form = UploadFileForm(request.POST, request.FILES)
if form.is_valid():
uploaded_file = request.FILES['file']
request.session['uploaded_file_name'] = uploaded_file.name
request.session['uploaded_file_size'] = uploaded_file.size
session_id = str(uuid.uuid4())
request.session['session_id'] = session_id
try:
transcribed_doc, created = TranscribedDocument.objects.get_or_create(id=session_id)
transcribed_doc.audio_file = uploaded_file
transcribed_doc.save()
...
except Exception as e:
# Log the error and respond with a server error status
print(f"Error occurred: {str(e)}")
return HttpResponse(status=500)
...
else:
return HttpResponse(status=500)
else:
form = UploadFileForm()
return render(request, 'transcribe/transcribe-en.html', {"form": form})
forms.py:
def validate_audio_language(value):
#code to validate audio language
if value not in allowed_languages:
raise ValidationError("Error")
def validate_output_file_type(value):
#code to validate file type
if value not in output_file_type:
raise ValidationError("Error")
class UploadFileForm(forms.Form):
file = forms.FileField(validators=[validate_file])
docker-compose.yml:
#version: "3.9"
services:
web:
build: .
#command: python /code/manage.py runserver 0.0.0.0:8000
command: gunicorn mysite.wsgi -b 0.0.0.0:8000 --reload
volumes:
- .:/code
ports:
- 8000:8000
depends_on:
- db
- redis
- celery
environment:
- "DJANGO_SECRET_KEY="
user: user-me
db:
image: postgres:13
volumes:
- postgres_data:/var/lib/postgresql/data/
environment:
- "POSTGRES_HOST_AUTH_METHOD=trust"
redis:
image: redis:6
ports:
- 6379:6379
celery:
build: .
command: celery -A mysite worker --loglevel=info
volumes:
- .:/code
depends_on:
- redis
- db
environment:
- "DJANGO_SECRET_KEY="
user: user-me
volumes:
postgres_data:
Подробнее здесь: [url]https://stackoverflow.com/questions/79037283/django-error-worker-pid7-was-sent-sigkill-perhaps-out-of-memory-messag[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия