Как соединить php и python

Web-разработка на Python глазами PHP-программиста

Введение

Как соединить php и python. Смотреть фото Как соединить php и python. Смотреть картинку Как соединить php и python. Картинка про Как соединить php и python. Фото Как соединить php и python
В статье хотелось бы поднять вопросы отличия использования Python для web-разработки по сравнению с оной на PHP. Надеюсь, статья не приведет к холиварам, так как она вовсе не о том, какой язык лучше или хуже, а исключительно о технических особенностях Python.

Немного о самих языках

PHP — веб-ориентированный язык, создан, чтобы умирать (в хорошем смысле слова). С низкоуровневой точки зрения приложение на PHP представляет собой скорее набор отдельных скриптов возможно с единой семантической точкой входа.

Python — универсальный язык программирования, применимый в том числе и в вебе. С технической точки зрения web-приложение на Python — полноценное приложение, загруженное в память, обладающее своим внутренним состоянием, сохраняемым от запроса к запросу.

Исходя из вышеописанных особенностей вытекают и различия в обработке ошибок в web-приложениях. В PHP существует целый зоопарк типов ошибок (errors, exceptions), далеко не каждую из которых можно перехватить, хотя это (невозможность перехвата) и не имеет большого значения, так как приложение живет ровно столько, сколько обрабатывается один запрос. Неперехваченная ошибка просто приводит к досрочному выходу из обработчика, и удалению приложения из памяти. Новый запрос будет обрабатываться новым «чистым» приложением. В Python же приложение постоянно находится в памяти, обрабатывая множество запросов без «перезагрузки». Таким образом поддерживать правильное предсказуемое состояние приложения крайне важно. Все ошибки используют стандартный механизм исключений и могут быть перехвачены (разве что за исключением SyntaxError). Неперехваченная ошибка приведет к завершению приложения, которое понадобится перезапускать извне.

Существует множество способов «приготовить» PHP и Python для веба. Далее я остановлюсь на двух наиболее мне знакомых (и кажется наиболее популярных) — PHP + FastCGI (php-fpm) и Python + WSGI (uWSGI). Конечно же, перед обоими этими связками предполагается наличие фронтенд-сервера (например, Nginx).

Поддержка многопоточности Python

Запуск сервера приложений (например, uWSGI) приводит к загрузке интерпретатора Python в память, а затем загрузке самого web-приложения. Обычно bootstrap-модуль приложения импортирует необходимые ему модули, производит вызовы инициализации и в итоге экспортирует подготовленный callable объект, соответствующий спецификации WSGI. Как известно, при первом импорте Python-модулей, код внутри них исполняется, в том числе создаются и инициализируются значениями переменные. Между двумя последовательными HTTP-запросами состояние интерпретатора не сбрасывается, следовательно сохраняются значения всех переменных уровня модуля.

Напишем простейшее WSGI-приложение, которое наглядно продемонстрирует вышеописанное на примере:

Здесь n является переменной модуля и она будет создана со значением 0 при загрузке приложения в память следующей командой:

Само приложение просто выводит на страницу значение переменной n. Для заядлых PHP программистов оно выглядит бессмысленным, так как «должно» каждый раз выводить на страницу строку «000001».

В результате мы получим строку «000501», что подтверждает наше утверждение, о том, что приложение находится загруженным в память uwsgi и сохраняет свое состояние между запросами.

Если запустить uWSGI с параметром —processes 2 и провести тот же тест, то несколько последовательных вызовов curl покажут, что мы имеем уже 2 различные возрастающие последовательности. Так как ab посылает 500 запросов, примерно половина из них приходится на один процесс uWSGI, а остальные — на второй. Ожидаемые значения, возращаемые curl будут примерно «000220» и «000280». Интерпретатор Python, судя по всему, один на процесс, и мы имеем 2 независимых окружения и реальную параллельную обработку запросов (в случае многоядерного процессора).

Python поддерживает потоки, как часть языка. Классическая реализация (CPython) использует нативные потоки OS, но есть GIL — в один момент времени выполняется только один поток. При этом все равно возможны проблемы race condition, так как даже n += 1 не является атомарной операцией.

«Дизассемблируем» наше WSGI-приложение:

Видно, что инкремент в нашей программе занимает 4 операции. Прерывание GIL может наступить на любой из них.

Увеличение количества потоков при отсуствии ожидания IO в коде обработчиков HTTP-запросов не приводит к ускорению обработки (а скорее даже ее замедляет, так как потоки могут «толкаться», переключая контексты). Реальной параллельности потоки в следствие ограничеия GIL не создают, хоть и являются не green thread’ами, а настоящими потоками OS.

Проведем еще один тест. Запустим uwsgi с 1 процессом, но 10 потоками-обработчиками в нем:

и выполним с помощью ab 5000 запросов к приложению.

Последующие запросы curl 127.0.0.1:8080 покажут, что мы имеем только одну возрастающую последовательность, значение которой

Источник

Можно ли соединить Python и PHP или JS?

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Как можно интерполировать или соединить точки функции?
Задача про популяцию хищников и жертв(возможно слышали). Мне нужно построить график времени от 1-го.

Можно ли адекватно php и python?
Решил посмотреть, что же за зверь такой этот python. Обнаружил что на моем сервере он уже.

PhP или Python
Доброго времени суток! Я как начинающий программист не могу определится с языком для дальнейшей.

Моя цель это создание бота на PHP или JS для Ютуба,но он почти весь состоит из Python (это взял из Википедии) но я не хочу учить Python только для этой задачи, буду учить PHP или JS, как мне быть?

Решение

Спасибо, буду изучать PHP!

Добавлено через 38 секунд

А у Вас самих был такой способ?

Добавлено через 1 минуту
упс, не способ, а случай

Придётся Python 4 месяца изучать только для этого?

Добавлено через 4 минуты
курить Python придётся Как соединить php и python. Смотреть фото Как соединить php и python. Смотреть картинку Как соединить php и python. Картинка про Как соединить php и python. Фото Как соединить php и python

Ну тогда тем более!

Добавлено через 17 секунд
или как вариант изучить то что нужно

Добавлено через 18 секунд
и не надо курить

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Есть ли в C# массивы данных аналогичные PHP или Python
Объясните пожалуйста, есть ли в C# массивы данных аналогичные PHP или Python; Если не сложно.

Php, python или ruby для веб парсинга
Добрый день! Есть задача написать парсер сайта. Функционал парсера самый обычный, собирать.

Как соединить php и python. Смотреть фото Как соединить php и python. Смотреть картинку Как соединить php и python. Картинка про Как соединить php и python. Фото Как соединить php и pythonPython вместо php. Или как поставить питон на сервер?
Скажите пожалуйста, возник вопрос, на компьютере хоста сайта есть сервер, будто apache или еще.

А можно ли создать язык программирования на PHP или JS?
Привет всем! У меня возник вопрос, а можно ли создать язык программирования на PHP или JS? Если да.

Источник

выполнение скрипта Python в PHP и обмен данными между двумя

Можно ли запускать скрипт Python в PHP и передавать переменные друг от друга?

У меня есть класс, который обрывает сайты для данных определенным глобальным способом. я хочу, чтобы он стал намного более конкретным и уже имел скрипты pythons, характерные для нескольких веб-сайтов.

Я ищу способ включить тех, кто находится внутри моего класса.

Возможна ли безопасная и надежная передача данных между двумя? если да, то как трудно получить что-то подобное?

Обычно вы можете общаться между языками, используя общие языковые форматы, и использовать stdin и stdout для передачи данных.

Пример с PHP / Python с использованием аргумента оболочки для отправки исходных данных через JSON

Вы ищете «межпроцессное общение» (IPC) – вы можете использовать что-то вроде XML-RPC, которое в основном позволяет вызывать функцию в удаленном процессе и обрабатывает перевод всех типов данных аргументов между языками (чтобы вы могли вызывать функцию PHP из Python или наоборот – если аргументы поддерживаемого типа )

Python имеет встроенный XML-RPC-сервер и клиент

Библиотека phpxmlrpc имеет как клиент, так и сервер

У меня была такая же проблема, и я хотел поделиться своим решением. (следует за тем, что предлагает Амадан)

кусок питона

часть php

Лучше всего запустить python в качестве подпроцесса и захватить его вывод, а затем разобрать его.

Использование JSON, вероятно, поможет упростить как производство, так и анализ на обоих языках, поскольку оно стандартно, и оба языка поддерживают его (ну, по крайней мере, не древние версии). В Python,

Вы также можете явно сохранять данные в виде файлов или использовать сокеты или иметь много разных способов сделать это более эффективным (и более сложным) в зависимости от точного сценария, который вам нужен, но это самый простой.

Источник

Если вы решили перейти с PHP на Python, то к чему следует подготовиться

Думали ли вы когда-нибудь о том, что однажды слишком быстро втянулись в веб-программирование на PHP? И вот уже прошло много лет, у вас хороший опыт, и вы не думаете ни о каких других способах „делать“ веб, кроме как на PHP. Может быть, у вас возникают сомнения в правильности выбора, однако непонятно, как найти способ быстро его проверить. А хочется примеров, хочется знать, как изменятся конкретные аспекты деятельности.

Сегодня я попробую ответить на вопрос: «А что если вместо PHP писать на Python?».

Сам я долгое время задавался этим вопросом. Я писал на PHP 11 лет и даже являюсь сертифицированным специалистом. Я научился его «готовить» так, чтобы он работал в точности, как мне надо. И когда я в очередной раз читал на Хабре перевод статьи о том, как всё в PHP плохо, я просто недоумевал. Однако подвернулся случай пересесть на Ruby, а потом и на Python. На последнем я и остановился, и теперь попробую рассказать вам PHP-шникам, как нам питонистам живётся.

Как соединить php и python. Смотреть фото Как соединить php и python. Смотреть картинку Как соединить php и python. Картинка про Как соединить php и python. Фото Как соединить php и python

Формат статьи

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

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

Подготовка консолей

Я попытался сделать эту статью интерактивной. Поэтому при прочтении настоятельно рекомендую набирать примеры из неё в консолях. Вам понадобится консоль PHP, а лучше сразу psysh:

И консоль Python. Лучше поставить более удобные варианты bpython или ipython, чем встроенная в язык по умолчанию, так как в них уже есть автодополнение. Но можно и так:

И, чтобы применить изменение прямо сейчас без перезапуска консоли, выполнить:

Сам язык

Основные особенности

Правда, обычно у вас в коде типы перемешиваться не будут и данный эффект не будет мозолить вам глаза. В принципе, когда я писал на PHP, ситуаций когда нестрогая типизация реально помогала, было 1-2 на проект, а так обычно взаимодействовали переменные одного типа.

Философия строгой типизации накладывает свой отпечаток и на обработку ошибок. Например, если функция int должна возвращать целый тип, то она не может вернуть None на строку, из которой нельзя однозначно извлечь этот тип. Поэтому генерируется исключение. Это грозит тем, что всё, что прислал пользователь, надо преобразовывать в нужный тип, иначе вы рано или поздно схватите эксепшн на проде.

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

Чтобы использовать значения разных типов в одном выражении, вам нужно их преобразовать, для этого есть функции: str, int, bool, long. Ну а для форматирования есть более элегантные конструкции.

Строки

Форматирование

Теперь вам нужно просто переучиться:

Вариантов вроде больше и есть хороший вариант для локализаторов.

Методы строки

Самое главное, что есть в Python и чего не хватает в PHP, — это встроенные методы. Давайте сравним:

А как часто вы делали что-то типа такого?

Поддержка юникода

Ну и наконец юникод. В Python 2 все строки по умолчанию не юникод (В Python 3 — по умолчанию юникод). Но стоит вам подставить магическую букву u вначале строки, как она автоматически становится юникодной. И далее все встроенные (и не встроенные) строковые методы Python будут работать хорошо.

Как соединить php и python. Смотреть фото Как соединить php и python. Смотреть картинку Как соединить php и python. Картинка про Как соединить php и python. Фото Как соединить php и python
Подобную нативную поддержку юникода хотели завести в PHP 6, но не осилили.
В PHP, кстати, вы можете воспользоваться MBString function overloading и получить аналогичный эффект, но он отмечен, как устаревший. И вы лишаетесь работы с помощью перегруженных функций с бинарными строками, но вы по прежнему можете работать со строкой как с массивом.

«Сырые» строки

Многие из вас знают чем одиночные кавычки отличаются от двойных:

Что-то подобное есть и в Python. Если подставлять перед строкой литерал r, то это поведение почти аналогично одиночным кавычкам в PHP.

Массивы

Теперь разберёмся с массивом. В PHP вы могли запихнуть в качестве ключей целые числа или строки:

Как соединить php и python. Смотреть фото Как соединить php и python. Смотреть картинку Как соединить php и python. Картинка про Как соединить php и python. Фото Как соединить php и python
Несмотря на то что array переводится как массив, в PHP array не обычный массив (то есть список), а ассоциативный (то есть, словарь). Обычный массив в PHP тоже есть, это SPLFixedArray. Он ест меньше памяти, потенциально быстрее, но ввиду сложности объявления и сложности расширения практически не используется.

В Python для массива мы используем 3-4 типа данных:

Импорты

Ещё одна интересная вещь — импорты. Своеобразный альтернативный взгляд на неймспейсы с обязательным использованием.

В PHP ты написал require_once и дальше тебе это доступно, пока жива PHP-шная сессия выполнения. Обычно при использовании CMS люди запихивают всё в классы, а классы располагают в специальных местах, и пишут свою маленькую функцию, которая знает эти места и регистрируют её через spl_autoload_register в самом начале файла.

В питоне каждый файл — своя область видимости. И в нём будет доступно только то, что вы в него подгрузите. По умолчанию доступна только стандартная библиотека питона (около 80 функций). Но давайте лучше на примере:

Допустим, вы сделали файл tools/logic.py

И теперь хотите его использовать в файле main.py. В этой ситуации вам необходимо импортировать или весь файл или нужные вам части в файл, где вы работаете.

И так абсолютно везде. Почти все файлы на питоне начинаются с импортов в текущий файл вспомогательных питонячих объектов: ваших и встроенных библиотек. Это всё равно как если бы функции в PHP вида mysqli_*, pdo_*, memcached_*, а также весь ваш код находились только в неймспейсах, и вам приходилось бы каждый раз их импортировать в каждом файле. Какие преимущества у такого подхода?

Удобно ли каждый раз прописывать импорты? Это зависит от вашего склада ума. Если вам нравится больший контроль над кодом, то вы предпочтёте прописывание импортов, чем их отсутствие. В некоторых командах существует даже своя система правил, описывающих в каком порядке можно подключать внешний код для минимизации циклических импортов до минимума. Если в вашей команде нет таких правил и вы не хотите особо заморачиваться, то можно просто положиться на IDE, которая автоматически проставит импорты для всего, что вы используете. Ну и в довесок: импорты не уникальная особенность питона, в Java и C# тоже есть импорты, вроде никто не жаловался.

Параметры в функции *args, **kwargs

Синтаксис с параметрами по умолчанию в целом похож:

Но порой вам нужна функция под неизвестное количество аргументов. Это может быть: проксирующая функция, логирующая функция или функция для получения сигналов. В PHP, начиная с 5.6, вам доступен следующий синтаксис:

В Python аналогично можно ловить в массив неименнованные и в словарь именованные аргументы:

Соответственно *argslist неименованных аргументов, **kwargsdict именованных аргументов.

Классы

Давайте посмотрим на следующий код:

Какие основные отличия от PHP мы можем выделить:

Стиль кодирования

Не знаю как у вас, а я писал на несколько долгоиграющих проектов и всегда отмечал, что стиль кодирования у разных членов команды разный. Нередко по коду можно понять, кто это писал. И всегда хотелось, чтобы был какой-то стандарт оформления кода для единообразия. И всегда были большие споры при согласовании этого документа внутри команды. Для питона это тоже справедливо, но в меньшей степени, ибо есть рекомендации от людей, в квалификации которых мало кто может сомневаться и советов от которых на первое время хватит:

Версии питона

В PHP новые версии всегда обратно совместимы со старыми, хотя иногда требуется доработка напильником. В питоне есть Python 2 и Python 3. Они не совместимы в лоб, хотя в последнее время разработчики питона дело упростили сильно. Можно сразу писать под две версии, но если используются новые фишки Python 3 типа: встроенной асинхронной поддержки или особенностей нового юникода, то скорее всего ничего не получится. По этой причине вся «тяжёлая промышленность», которая имеет кодовую базу в несколько лет, до сих пор сидит на Python 2.
Разумных причин начинать новый проект на Python 2 на момент 2019 года нет.

Что на что меняется

Вместо выводов

Как понять надо ли оно вам?
Мой способ освоить Python

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

Обновлено: Мелкие исправления и улучшения (благодаря: dginz, defuz, dsx, Stepanow, Studebecker, svartalf).
Обновлено: Нашлись абстрактные классы (благодаря: yktoo). Так же со временем вам придётся познакомиться с удивительным миром декораторов.
Обновлено в 2018: Особенности распространенности Python 2 и 3.
Обновлено в 2019: Особенности Python 3.8 и англоязычный перевод.

Источник

Перенос крупного PHP приложения на Python [закрыт]

Хотите улучшить этот вопрос? Переформулируйте вопрос так, чтобы на него можно было дать ответ, основанный на фактах и цитатах.

Требуется перенести крупный (с очень сложной структурой) веб-проект на Python-платформу. Приложение представляет из себя что-то вроде социальной сети или сообщества для корпоративного использования.

База данных меняться не будет (MySQL), а её структура и подавно. Поэтому будущая система должна писаться с оглядкой на уже существующие данные и базу.

Система должна быть очень гибкой и удобной для всевозможных изменений.

Поэтому вопрос таков: на чем стоит разрабатывать приложение?

В качестве вариантов рассматривали Flask и Pylons, но по ним информации (а тем более кадров) намного меньше. Поэтому будем рады замечаниям на этот счет.

Подтвердите, опровергните наши размышления либо предложите какой-то свой вариант решения проблемы. Очень будем признательны за развернутый ответ.

2 ответа 2

я выскажу свое мнение:

1) Для крупных проектов используется JAVA либо C#

2) Некоторые используют PYTHON (типа яндекса) кто-то и PHP

4) «Убогость PHP» ну никак не оправдано, это довольно быстрый язык и на нем стоит куча сайтов (до недавнего времени ВК стоял на ПХП и проблем не было)

5) ПХП обновляется динамично что дает через некоторое время оптимизацию тех функцию которые на сегодняшний момент работают не так глатко.

6) раз у вас там мега-сеть, легче купить вторую машину, которая будет брать часть нагрузки, чем все переписывать.

7) поддерживать ПХП (по мне так) легче.

8) Хотите быстродействие? берите вон KPHP

Как соединить php и python. Смотреть фото Как соединить php и python. Смотреть картинку Как соединить php и python. Картинка про Как соединить php и python. Фото Как соединить php и python

Вставлю и я свои 5 копеек..

На Flask и Pylons у меня опыта нет, потому дам только контр-аргументы к вашим по Django:

ПС: Если ваша команда пока только будет начинать изучать новые инструменты и еще нет выработанных привычек, то можно взять Flask ибо он слывет своей минималистичностью, вы сами напишете к нему что нужно и не будет избыточности в вашем случае. Но если в будущем надо будет набирать новых разработчиков, то мне кажется на Django найти специалиста куда проще, чем на всякую экзотику.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *