Я обнаружил, что pthreads
не работает в веб-среде. Я использую PHP7.1 на FPM на Linux Debian, который я также использую Symfony 3.2
. Все, что я хочу сделать, это, например:Async/Thread на PHP7 с FPM
- Пользователь сделал запрос и
PUT
файл (который составляет 1 ГБ) - PHP сервер получает файл и обработать его.
- Немедленно вернуть
true
к пользователю (jsonResponse
), не дожидаясь обработки загруженного файла - Позже, при обработке файла закончена (перемещение, копирование, дублировать то, что вы хотите) просто добавить событие или сделать обратный вызов от фона и уведомления пользователя.
Теперь. Для этого я создал Console Command
. Я выполняю Process('bin/console my:command')->start();
с фона, и я делаю свою обработку. Но это убивает муху с помощью базуки для меня. Мне нужно передать много переменных этой исполняемой команде.
Все, что я хочу создать другой поток и просто вернуться к пользователю, не ожидая обработки.
Вы можете сказать, что это duplicate. И укажите на pthreads
. Но pthreads заявил, что он предназначен только для CLI. Также последняя версия pthreads не работает с symfony. (фатальная ошибка).
Я застрял в этой точке и есть сомнения, если я должен остаться с созданием процессов для каждого загружаемого файла или двигаться к python -> django
Вы не хотите создавать темы. Вам нужна очередь заданий. Посмотрите на Gearman или подобные вещи. – Gordon
Мне очень понравилось. Я посмотрел на дока. и я думаю, что это будет лучше для меня. Я также упомянул ** очередь ** в моем вопросе, но я удалил позже. Увидев механизм Gearman и очереди, я решил пойти с очередью заданий. Кроме того, прочитайте, что создание - для примера - 2 потока на выполнение и позволяет сказать, что 400 клиент приходит на сервер, он будет запускать 800 потоков. и это не то, что я хочу. Гирмен - это ключ. Я глубоко погрузись в это. Благодарю. Ой! Вы можете добавить это как ответ :) – xangr
Возможно, вы ищете асинхронную обработку: https://gist.github.com/LeonanCarvalho/62c6fe0b62db8a478f502f84c5734c83 – LeonanCarvalho