LINUX.ORG.RU

запускать скрипт в отдельном потоке, php, apache

 , , , ,


0

1

Здравствуйте, есть определенная информационная система, она давно и успешно работает со стандартными настройками apache в отношении количества children, threads, max connections, etc. Недавно в сервис был добавлен функционал по загрузке файлов определенного типа, их конвертации и сохранению. Данный скрипт работает довольно долго, до 20 секунд (конвертация сторонней утилитой gs/imagemagick), прежде чем выдать страницу о том что файл загружен. Если во время загрузки кто-то еще пытается вызвать систему - она не отвечает до конца работы скрипта, и это понятно почему. Вопрос: как модифицировать скрипт, чтобы ради него создавался отдельный поток апача, или куда в настройках httpd, htdocs вписать правило, что данный скрипт должен работать отдельно не мешая другим?

Ответ на: комментарий от TDrive

threads тут явно не при чём. PHP USE=«threads» считается неправильной практикой. Оно итак не должно никак блокироваться. Так что либо тут сугубо один поток PHP, либо блокировка на уровне ресурсов. Если б с БД было дело, тогда понятно. Но с картинками — фиг знает. Может, ручная блокировка, чтобы два потока одну задачу не начали обрабатывать.

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

На сколько я понял ТСа он знает причину блокировки

она не отвечает до конца работы скрипта, и это понятно почему.

И ему нужно запустить долгий процесс отдельно от основного скрипта.

TDrive ★★★★★
()
Ответ на: комментарий от TDrive

И ему нужно запустить долгий процесс отдельно от основного скрипта.

Если причина блокировки известна, то её можно просто убрать. Если убрать её нельзя (например, что-то поломаться может), то её нельзя убрать и для отдельного потока.

KRoN73 ★★★★★
()
Ответ на: комментарий от TDrive

абсолютно верно, причина «блокировки» это очередь выполнения запросов одного из воркеров апача. можно было бы наклепать воркеров которые выполняют по 1 запросу, но это очень нерационально, поэтому я хочу создать отдельного апача для моего скрипта. howto. KRoN73 не очень понял суть вопроса.

preepunk
() автор топика

Если во время загрузки кто-то еще пытается вызвать систему - она не отвечает до конца работы скрипта, и это понятно почему.

Не кто-то еще, а этот же пользователь. Понятно почему - из-за блокировки сессии.

goingUp ★★★★★
()

Асинхронь с какой-нибудь очередью.

visual ★★★
()

Если во время загрузки кто-то еще пытается вызвать систему - она не отвечает до конца работы скрипта, и это понятно почему

какраз непонятно, абсолютно.
у вас что, не многопоточный вебсервер? не помню чтобы в стандартных настройках апача указывался аж один воркер-процесс.
по всей вероятности дело в кривом коде вашего приложения.

Komintern ★★★★★
()

Начнем с того, что по умолчанию такого быть не может. То есть если один пользователь запустил скрипт, который выполняется хоть 30 секунд, то запросы остальных пользоватеелй обрабатываться будут.

Но возможна ситуация, что другие запросы пользователя, от которого был первый запрос перестают обрабатыватся. В таком случае с вероятностью в 95 процентов это лок сессии. То есть скрипт, в котором ты грузишь файл открывает сессию и держит её до момента загрузки файла. Если это так то решение - просто закрывать сессию тогда, когда она не нужна.

aiive
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.