Skip to content

Commit

Permalink
[Swoole AI Assistant] translate to ru
Browse files Browse the repository at this point in the history
  • Loading branch information
matyhtf committed Dec 11, 2024
1 parent 07b7ca5 commit 8139ba3
Show file tree
Hide file tree
Showing 26 changed files with 1,467 additions and 0 deletions.
1 change: 1 addition & 0 deletions docs/ru/.translate.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"latest_commit":"07b7ca5e6da5d9d09bd046769dc6500eb5a737c8"}
45 changes: 45 additions & 0 deletions docs/ru/README.md
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)

Обратите внимание, что некоторые ссылки и идентификаторы могут не иметь прямой эквивалента на русском языке, и их можно использовать так же, как и на китайском языке.
112 changes: 112 additions & 0 deletions docs/ru/benchmark.md
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%` выше.
140 changes: 140 additions & 0 deletions docs/ru/php/build-on-windows.md
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`.
65 changes: 65 additions & 0 deletions docs/ru/php/build.md
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
```
Loading

0 comments on commit 8139ba3

Please sign in to comment.