Начиная с Flask 1.0 сервер WSGI, включенный с Flask, запускается в поточном режиме по умолчанию.
До версии 1.0 или если вы отключили потоки, сервер запускается в однопоточном режиме и может обрабатывать только один запрос за раз. Любые параллельные запросы должны будут ждать, пока они не будут обработаны, что может привести к проблемам, если вы попытались связаться с вашим собственным сервером из запроса .
С запросами threaded=True
каждый из которых обрабатывается в новом потоке. Сколько потоков, которые ваш сервер может обрабатывать одновременно, полностью зависит от вашей ОС и от каких ограничений он устанавливает количество потоков в процессе. Реализация использует класс SocketServer.ThreadingMixIn
, который не устанавливает ограничений на количество потоков, которые он может вращать.
Обратите внимание, что сервер Flask предназначен только для разработки . Это не готовый к производству сервер. Не полагайтесь на это, чтобы запустить свой сайт в более широкой сети. Вместо этого используйте правильный сервер WSGI, например gunicorn или uWSGI ).
В ваших методах отсутствует ключевое слово static
. Измените
function getInstanceByName($name=''){
на
public static function getInstanceByName($name=''){
, если вы хотите называть их статически.
Обратите внимание, что статические методы (и Singletons ) являются смертью для проверки .
Также обратите внимание, что вы слишком много делаете работа в конструкторе, особенно все, что запросы не должны быть там. Все, что должен сделать ваш конструктор, - установить объект в допустимое состояние. Если вам нужно иметь данные извне класса, чтобы сделать это, подумайте о том, чтобы вводить его, а не тянуть его. Также обратите внимание, что конструкторы ничего не могут вернуть. Они всегда будут возвращать пустоту, поэтому все эти return false
утверждения ничего не делают, кроме завершения конструкции.
Если разрешение области видимости :: должно было использоваться вне класса, то соответствующая функция или переменная должна быть объявлена как статическая
class Foo {
//Static variable
public static $static_var = 'static variable';
//Static function
static function staticValue() { return 'static function'; }
//function
function Value() { return 'Object'; }
}
echo Foo::$static_var . "<br/>"; echo Foo::staticValue(). "<br/>"; $foo = new Foo(); echo $foo->Value();
return false
обычно означает прекращение создания объекта с ошибкой. Это так просто.
Я думаю, что это может ответить на ваш вопрос.
Нестатический метод ..... не следует называть статически
Если метод не статический, вам нужно инициализировать его так:
$var = new ClassName();
$var->method();
Или, в PHP 5.4, вы можете использовать этот синтаксис:
(new ClassName)->method();
(new ClassName())->method();
, и я считаю, что он совместим с PHP от 5 до 7
– Dennis
13 July 2016 в 20:01
(new ClassName)->method();
несовместим с PHP 5.3. Я просто попробовал.
– Sonny
24 January 2017 в 17:13
Вместо использования экземпляра с оператором разрешения области :: поскольку он не был определен как статическая функция.
$r=Page::getInstanceByName($page);
измените его на:
$r=Page->getInstanceByName($page);
И он будет работать как шарм.
использовать классName-> function (); вместо className :: function ();
public
используется только в объявлениях функций / переменных внутри класса. См. stackoverflow.com/questions/13341378/… – gibberish 6 February 2015 в 19:17