На момент написания моего текущего комментария я не знал о потоках PHP. Я сам пришел к поиску ответа, но один из обходных путей заключается в том, что PHP-программа, которая получает запрос от веб-сервера, делегирует всю формулировку ответа консольному приложению, которое сохраняет свои выходные данные, ответ на запрос, в двоичный файл. и программа PHP, которая запустила консольное приложение, возвращает этот двоичный файл побайтно в качестве ответа на полученный запрос. Консольное приложение может быть написано на любом языке программирования, работающем на сервере, включая те, которые имеют надлежащую поддержку потоков, в том числе программы на C ++, использующие OpenMP.
Один ненадежный, грязный трюк состоит в том, чтобы использовать PHP для выполнения консольного приложения «uname»,
uname -a
и распечатать вывод этой консольной команды в вывод HTML, чтобы узнать точную версию. серверного программного обеспечения. Затем установите точно такую же версию программного обеспечения на экземпляр VirtualBox, скомпилируйте / соберите все необходимые автономные, предпочтительно статические, двоичные файлы, а затем загрузите их на сервер. С этого момента приложение PHP может использовать эти двоичные файлы в роли консольного приложения, которое имеет правильную многопоточность. Это грязный, ненадежный обходной путь в ситуации, когда администратор сервера не установил все необходимые реализации языка программирования на сервер. Остерегайтесь того, что при каждом запросе PHP-приложение получает консольное (-ие) приложение (-ы) / exit / get_killed.
Что касается того, что администраторы хостинг-службы думают о таких шаблонах использования сервера, я думаю, это сводится к культуре. В Северной Европе поставщику услуг необходимо предоставить то, что было объявлено, и если было разрешено выполнение консольных команд и разрешена загрузка файлов, не относящихся к вредоносным программам, и поставщик услуг имеет право уничтожить любой процесс сервера через несколько минут или даже через 30 секунд. то у администраторов хостинг-сервиса нет никаких аргументов для формирования правильной жалобы. В Соединенных Штатах и Западной Европе ситуация / культура очень разные, и я считаю, что есть большой шанс, что в США и / или Западной Европе поставщик услуг хостинга откажется обслуживать клиентов услуг хостинга, которые используют описанный выше прием. Это только мое предположение, учитывая мой личный опыт работы с хостинг-службами в США и то, что я слышал от других о хостинг-сервисах в Западной Европе. На момент написания моего текущего комментария (2018_09_01) я ничего не знаю о культурных нормах южно-европейских поставщиков услуг хостинга, администраторов южно-европейских сетей.
После поиска именно этой проблемы я нашел в Интернете этот отрывок из книги . Он точно отвечает на вопрос, как пропустить текущую итерацию и перейти прямо к следующей итерации цикла repeat
.
В Applescript есть exit repeat
, что полностью завершит цикл , пропуская все оставшиеся итерации. Это может быть полезно в бесконечном цикле, но в данном случае это не то, что нам нужно.
Очевидно, в AppleScript нет функции, подобной continue
, но вот трюк для ее моделирования:
set aList to {"1", "2", "3", "4", "5"}
repeat with anItem in aList -- # actual loop
repeat 1 times -- # fake loop
set value to item 1 of anItem
if value = "3" then exit repeat -- # simulated `continue`
display dialog value
end repeat
end repeat
Это отобразит диалоговые окна для 1, 2, 4 и 5.
Здесь вы создали два цикла: внешний цикл - это ваш фактический цикл, внутренний цикл - это цикл, который повторяется только один раз. exit repeat
выйдет из внутреннего цикла, продолжая внешний цикл: именно то, что мы хотим!
Очевидно, если вы воспользуетесь этим, вы потеряете возможность выполнять обычный exit repeat
.