-
Notifications
You must be signed in to change notification settings - Fork 45
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[Swoole AI Assistant] translate to ru
- Loading branch information
Showing
26 changed files
with
1,467 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
{"latest_commit":"07b7ca5e6da5d9d09bd046769dc6500eb5a737c8"} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
Перевод текста из китайского документа на русский язык: | ||
|
||
--- | ||
|
||
- [Вызов Python-модулям из PHP](php/tutorial.md) | ||
- [Вызов PHP-функций из Python](python/tutorial.md) | ||
- [Разработка пути](roadmap.md) | ||
|
||
Расширения PHP | ||
--------- | ||
* [Сборка и установка](php/build.md) | ||
* [Языковые ядра](php/core.md) | ||
* [Встроенные типы](php/object.md) | ||
* [Обработка исключений](php/exception.md) | ||
* [Целые числа](php/int.md) | ||
* [Калькулятивные функции](php/fn.md) | ||
* [Копирование памяти](php/memory.md) | ||
* [Тестирование производительности](benchmark.md) | ||
* [Идентификация IDE](php/composer.md) | ||
* [Сетевые API](php/socket.md) | ||
* [Наследование Python-классов](php/inherit.md) | ||
|
||
Python-модули | ||
|
||
--- | ||
|
||
- [Список функций](python/function.md) | ||
- [Операции с объектами](python/object.md) | ||
- [Операции со строками](python/string.md) | ||
- [Операции с массивами](python/array.md) | ||
- [Операции с классами](python/class.md) | ||
- [Ссылочные типы](python/reference.md) | ||
- [Копирование памяти](php/memory.md) | ||
- [ 모ули](python/module.md) | ||
|
||
Учебные материалы | ||
|
||
--- | ||
|
||
- [phpy: библиотека для взаимного вызова PHP и Python, вносящая экосистему Python в PHP](https://zhuanlan.zhihu.com/p/670373512) | ||
- [Сборка и установка phpy PHP-8.3 под Ubuntu 18.04](https://mp.weixin.qq.com/s/q_-keG3clvs7Hii-oEW3RQ) | ||
- [phpy: Соединение экосистемы PHP и Python](https://zhuanlan.zhihu.com/p/671645003) | ||
- [Как через phpy вызвать открытую платформу больших моделей ModelScope в PHP](https://mp.weixin.qq.com/s/p5x2XwJgPpodZI_Woa8qPA) | ||
|
||
Обратите внимание, что некоторые ссылки и идентификаторы могут не иметь прямой эквивалента на русском языке, и их можно использовать так же, как и на китайском языке. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,112 @@ | ||
# Тестирование под нагрузкой | ||
В скрипте нагрузочного тестирования был создан объект `PyDict`, который использовался для чтения и写入 `PHP`-кода и `Python`-кода, выполняя операции `10 миллионов` раз. | ||
|
||
- `Версия PHP`: `PHP 8.2.3 (cli) (built: Mar 17 2023 15:06:57) (NTS)` | ||
|
||
- `Версия Python`: `Python 3.11.5` | ||
|
||
- операционная система: `Ubuntu 20.04` | ||
- `Версия GCC`: `gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.2)` | ||
|
||
> Обратите внимание, что для выполнения этого теста необходимо создать `HashTable` из `10 миллионов` элементов, что требует не менее `2 ГБ` памяти. | ||
## PHP | ||
```php | ||
<?php | ||
|
||
$dict = new PyDict(); | ||
const COUNT = 10000000; | ||
|
||
$n = COUNT; | ||
$s = microtime(true); | ||
while ($n--) { | ||
$dict['key-' . $n] = $n * 3; | ||
} | ||
echo 'dict set: ' . round(microtime(true) - $s, 6) . ' seconds' . PHP_EOL; | ||
|
||
$c = 0; | ||
$n = COUNT; | ||
$s = microtime(true); | ||
while ($n--) { | ||
$c += $dict['key-' . $n]; | ||
} | ||
echo 'dict get: ' . round(microtime(true) - $s, 6) . ' seconds' . PHP_EOL; | ||
``` | ||
|
||
## Python | ||
```python | ||
import time | ||
|
||
my_dict = {} | ||
COUNT = 10000000 | ||
|
||
n = COUNT | ||
start_time = time.time() | ||
|
||
for i in range(n): | ||
my_dict["key-" + str(i)] = i * 3 | ||
|
||
elapsed_time = time.time() - start_time | ||
|
||
print(f"dict set: {elapsed_time:.6f} seconds") | ||
|
||
n = COUNT | ||
|
||
total = 0 | ||
start_time_get = time.time() | ||
for i in range(n): | ||
total += my_dict["key-" + str(i)] | ||
|
||
elapsed_time_get = time.time() - start_time_get | ||
|
||
print(f"dict get: {elapsed_time_get:.6f} seconds") | ||
``` | ||
|
||
## PHP массив | ||
```php | ||
<?php | ||
|
||
ini_set('memory_limit', '2G'); | ||
$dict = []; | ||
const COUNT = 10000000; | ||
|
||
$n = COUNT; | ||
$s = microtime(true); | ||
while ($n--) { | ||
$dict['key-' . $n] = $n * 3; | ||
} | ||
echo 'array set: ' . round(microtime(true) - $s, 6) . ' seconds' . PHP_EOL; | ||
|
||
$c = 0; | ||
$n = COUNT; | ||
$s = microtime(true); | ||
while ($n--) { | ||
$c += $dict['key-' . $n]; | ||
} | ||
echo 'array get: ' . round(microtime(true) - $s, 6) . ' seconds' . PHP_EOL; | ||
``` | ||
|
||
## Сравнение результатов | ||
|
||
```shell | ||
(base) htf@swoole-12:~/workspace/python-php/docs/benchmark$ php dict.php | ||
dict set: 4.663758 seconds | ||
dict get: 3.980076 seconds | ||
(base) htf@swoole-12:~/workspace/python-php/docs/benchmark$ php array.php | ||
array set: 1.578963 seconds | ||
array get: 0.831129 seconds | ||
(base) htf@swoole-12:~/workspace/python-php/docs/benchmark$ python dict.py | ||
dict set: 5.321664 seconds | ||
dict get: 4.969081 seconds | ||
(base) htf@swoole-12:~/workspace/python-php/docs/benchmark$ | ||
``` | ||
|
||
На основе результатов тестирования на `Python`: | ||
|
||
| Название скрипта | Set | Get | | ||
|:----------|:----:|-----:| | ||
| dict.php | 114% | 125% | | ||
| array.php | 337% | 599% | | ||
|
||
- `phpy` показывает производительность в `PHP`, когда данные写入 `PyDict`, на `14%` выше, чем у нативного `Python`, а при чтении на `25%` выше. | ||
- `PHP` показывает производительность при написании данных в `PHP Array` в `337%` выше, чем при написании в `Python Dict`, а при чтении в почти `500%` выше. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,140 @@ | ||
# компиляция под Windows | ||
|
||
> Поддерживается только версия `PHP-8.1` и выше | ||
|
||
## Среда разработки PHP | ||
|
||
Ссылка: [https://wiki.php.net/internals/windows/stepbystepbuild_sdk_2](https://wiki.php.net/internals/windows/stepbystepbuild_sdk_2) | ||
|
||
|
||
|
||
- Установите `Visual C++ 16.0`, адрес: [https://aka.ms/vs/16/release/vs_buildtools.exe](https://aka.ms/vs/16/release/vs_buildtools.exe) | ||
|
||
- Установите `php-sdk-binary-tools`, адрес: [https://github.com/php/php-sdk-binary-tools](https://github.com/php/php-sdk-binary-tools) | ||
|
||
- Скачать исходный код `PHP` | ||
|
||
- Установить зависимые библиотеки, адрес: [https://windows.php.net/downloads/php-sdk/deps/](https://windows.php.net/downloads/php-sdk/deps/) | ||
|
||
> Все файлы, связанные с `PHP`, установлены в каталоге `d:\workspace` | ||
|
||
## Среда разработки Python | ||
|
||
|
||
|
||
- Установите `Python`, адрес: [https://www.python.org/downloads/windows/](https://www.python.org/downloads/windows/) | ||
|
||
- Установите переменную окружения `Path`, добавьте `d:\python` в список, в `Windows Terminal` выполните `Python -V` | ||
|
||
- Установите переменную окружения `PYTHONHOME`, указайте на `d:\python` | ||
|
||
> `Python` установлен в каталоге `d:\python` | ||
```shell | ||
C:\WINDOWS\system32>python -V | ||
Python 3.12.1 | ||
|
||
echo %Path% | ||
echo %PYTHONHOME% | ||
``` | ||
|
||
|
||
|
||
## Каталог построения | ||
|
||
```shell | ||
cd D:\workspace\php-sdk\php-sdk-binary-tools-2.2.0 | ||
phpsdk-vs16-x64.bat | ||
``` | ||
|
||
После успеха перейдите в этот терминал в каталог `php-src` | ||
|
||
```shell | ||
cd D:\workspace\php-sdk\php-sdk-binary-tools-2.2.0\phpdev\vs16\x64\php-8.1.5 | ||
phpsdk_deps -u | ||
``` | ||
|
||
Проекты расширений размещаются в каталоге `ext` в `php-src`, например: `D:\workspace\php-sdk\php-sdk-binary-tools-2.2.0\phpdev\vs16\x64\php-8.1.5\ext\phpy`, также можно использовать команду `mklink` для создания символической ссылки. | ||
|
||
|
||
|
||
## Конфигурация построения | ||
|
||
```shell | ||
$ buildconf --force | ||
Rebuilding configure.js | ||
Now run 'configure --help' | ||
configure --with-openssl --with-mysqlnd --with-mysqli --enable-mbstring --enable-pdo --with-pdo-mysql --with-curl --enable-cli --enable-opcache --disable-zts --enable-phpy=shared | ||
``` | ||
|
||
`--enable-phpy=shared` означает включение расширения `phpy` и его сборку в `.dll` динамическую библиотеку | ||
|
||
После успешного выполнения, вывод будет выглядеть следующим образом: | ||
|
||
```shell | ||
... | ||
|
||
Generating main/config.w32.h | ||
Generating phpize | ||
Done. | ||
|
||
|
||
Enabled extensions: | ||
----------------------- | ||
| Extension | Mode | | ||
----------------------- | ||
| date | static | | ||
| hash | static | | ||
| json | static | | ||
| pcre | static | | ||
| phpy | shared | | ||
| reflection | static | | ||
| spl | static | | ||
| standard | static | | ||
----------------------- | ||
|
||
|
||
Enabled SAPI: | ||
------------- | ||
| Sapi Name | | ||
------------- | ||
| cli | | ||
------------- | ||
|
||
|
||
--------------------------------------- | ||
| | | | ||
--------------------------------------- | ||
| Build type | Release | | ||
| Thread Safety | No | | ||
| Compiler | Visual C++ 2019 | | ||
| Architecture | x64 | | ||
| Optimization | PGO disabled | | ||
| Native intrinsics | SSE2 | | ||
| Static analyzer | disabled | | ||
--------------------------------------- | ||
|
||
|
||
Type 'nmake' to build PHP | ||
|
||
D:\workspace\php-sdk\php-sdk-binary-tools-2.2.0\phpdev\vs16\x64\php-8.1.5 | ||
$ | ||
``` | ||
|
||
|
||
|
||
## Компиляция расширений | ||
```shell | ||
nmake clean | ||
nmake | ||
``` | ||
|
||
## Пакирование бинарных | ||
|
||
```shell | ||
nmake snap | ||
``` | ||
|
||
После успешного выполнения в каталоге `D:\workspace\php-sdk\php-sdk-binary-tools-2.2.0\phpdev\vs16\x64\php-8.1.5\x64\Release` будет создан пакет `php-8.1.5-nts-Win32-vs16-x64.zip`. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,65 @@ | ||
# Сборка для Linux/macOS/Unix | ||
|
||
> В настоящее время поддерживается только версия `Python 3.10` или выше. | ||
|
||
- Измените путь к `Python` в `config.m4`, по умолчанию: `/opt/anaconda3` | ||
|
||
|
||
```shell | ||
phpize | ||
./configure | ||
make install | ||
``` | ||
|
||
Измените `php.ini`, чтобы добавить `extension=phpy.so` | ||
|
||
Используйте `php -m` чтобы проверить, появляется ли в списке, используйте `php --ri phpy` чтобы узнать информацию, используйте `php --re phpy` чтобы посмотреть классы и методы, определенные в расширении. | ||
|
||
|
||
php -m | ||
---- | ||
``` | ||
php -m | ||
[PHP Modules] | ||
bcmath | ||
bz2 | ||
Core | ||
... | ||
phpy | ||
... | ||
[Zend Modules] | ||
Zend OPcache | ||
``` | ||
|
||
|
||
Параметры сборки | ||
---- | ||
|
||
### `--with-python-dir` | ||
|
||
Указать путь к установке `Python`, например, `/usr/bin/python` должен быть установлен как `--with-python-dir=/usr` | ||
Если использовать `conda` для установки `Python`, следует установить как `/opt/anaconda3` | ||
|
||
|
||
### `--with-python-version` | ||
Указать версию `Python`, например, `3.10`, `3.11`, `3.12`, по умолчанию будет использоваться `$python-dir/bin/python -V` для получения версии. | ||
|
||
### `--with-python-config` | ||
Установить путь кExecutable `python-config`, этот параметр имеет более высокий приоритет, чем `--with-python-dir` и `--with-python-version` | ||
|
||
```shell | ||
(base) htf@swoole-12:~/workspace/python-php$ which python3.11-config | ||
/opt/anaconda3/bin/python3.11-config | ||
(base) htf@swoole-12:~/workspace/python-php$ python3.11-config | ||
Usage: /opt/anaconda3/bin/python3.11-config --prefix|--exec-prefix|--includes|--libs|--cflags|--ldflags|--extension-suffix|--help|--abiflags|--configdir|--embed | ||
(base) htf@swoole-12:~/workspace/python-php$ ./configure --wi | ||
--with-gnu-ld --with-libdir= --without-PACKAGE --with-PACKAGE --with-php-config= --with-pic --with-python-config --with-python-dir --with-python-version --with-tags= | ||
(base) htf@swoole-12:~/workspace/python-php$ ./configure --with-python-config=python3.11-config | ||
checking for grep that handles long lines and -e... /bin/grep | ||
checking for egrep... /bin/grep -E | ||
checking for a sed that does not truncate output... /bin/sed | ||
checking for pkg-config... /usr/bin/pkg-config | ||
checking pkg-config is at least version 0.9.0... yes | ||
``` |
Oops, something went wrong.