-
Notifications
You must be signed in to change notification settings - Fork 44
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 de
- Loading branch information
SwooleAI
committed
Dec 11, 2024
1 parent
85c43cf
commit dc2a416
Showing
26 changed files
with
1,462 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":"85c43cf27ffabd4ee9f861fba590979be0e338de"} |
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,48 @@ | ||
--- | ||
|
||
- [In PHP auf Python-Module aufrufen](php/tutorial.md) | ||
- [In Python PHP-Funktionen aufrufen](python/tutorial.md) | ||
- [Entwicklungspfad](roadmap.md) | ||
|
||
PHP-Erweiterungen | ||
---- | ||
* [Kompilierung und Installation](php/build.md) | ||
* [Sprachkern](php/core.md) | ||
* [Interne Typen](php/object.md) | ||
* [Fehlerbehandlung](php/exception.md) | ||
* [Ganzzahlige Zahlen](php/int.md) | ||
* [Rückruffunktionen](php/fn.md) | ||
* [Speicherkopien](php/memory.md) | ||
* [Leistungstests](benchmark.md) | ||
* [IDE-Tips](php/composer.md) | ||
* [Socket-API](php/socket.md) | ||
* [Erben von Python-Klassen](php/inherit.md) | ||
|
||
Python-Module | ||
|
||
--- | ||
|
||
- [Funktionsliste](python/function.md) | ||
|
||
- [Objektoperationen](python/object.md) | ||
|
||
- [String-Operationen](python/string.md) | ||
|
||
- [Array-Operationen](python/array.md) | ||
|
||
- [Klassensystem](python/class.md) | ||
|
||
- [Referenztypen](python/reference.md) | ||
|
||
- [Speicherkopien](php/memory.md) | ||
- [Modulverpackung](python/module.md) | ||
|
||
Anleitungen | ||
|
||
--- | ||
|
||
- [phpy: Eine Bibliothek zur gegenseitigen Anrufung von PHP und Python, die die Python-Ökologie in PHP einführt](https://zhuanlan.zhihu.com/p/670373512) | ||
|
||
- [Compilierung und Installation von phpy unter Ubuntu 18.04 mit PHP-8.3](https://mp.weixin.qq.com/s/q_-keG3clvs7Hii-oEW3RQ) | ||
- [phpy: Verbindung zwischen PHP und Python-Ökologie](https://zhuanlan.zhihu.com/p/671645003) | ||
- [Wie kann PHP über phpy开源大型模型平台魔塔ModelScope aufrufen](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,113 @@ | ||
# Stresstest | ||
In einem Stresstest-Skript wurde ein `PyDict` angelegt, um sowohl PHP- als auch Python-Code für die Ausführung von `10 Millionen` Mal zu lesen und zu schreiben. | ||
|
||
- `PHP-Version`: `PHP 8.2.3 (cli) (built: Mar 17 2023 15:06:57) (NTS)` | ||
|
||
- `Python-Version`: `Python 3.11.5` | ||
|
||
- Betriebssystem: `Ubuntu 20.04` | ||
- `GCC-Version`: `gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.2)` | ||
|
||
> Bitte beachten Sie, dass dieser Test eine `10 Millionen` Elemente umfassende `HashTable` benötigen und mindestens `2GB` an Arbeitsspeicher für die Ausführung benötigen kann. | ||
## 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) . ' Sekunden' . PHP_EOL; | ||
|
||
$c = 0; | ||
$n = COUNT; | ||
$s = microtime(true); | ||
while ($n--) { | ||
$c += $dict['key-' . $n]; | ||
} | ||
echo 'dict get: ' . round(microtime(true) - $s, 6) . ' Sekunden' . 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 Array | ||
```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) . ' Sekunden' . PHP_EOL; | ||
|
||
$c = 0; | ||
$n = COUNT; | ||
$s = microtime(true); | ||
while ($n--) { | ||
$c += $dict['key-' . $n]; | ||
} | ||
echo 'array get: ' . round(microtime(true) - $s, 6) . ' Sekunden' . PHP_EOL; | ||
``` | ||
|
||
## Ergebnisvergleich | ||
|
||
```shell | ||
(base) htf@swoole-12:~/workspace/python-php/docs/benchmark$ php dict.php | ||
dict set: 4.663758 Sekunden | ||
dict get: 3.980076 Sekunden | ||
(base) htf@swoole-12:~/workspace/python-php/docs/benchmark$ php array.php | ||
array set: 1.578963 Sekunden | ||
array get: 0.831129 Sekunden | ||
(base) htf@swoole-12:~/workspace/python-php/docs/benchmark$ python dict.py | ||
dict set: 5.321664 Sekunden | ||
dict get: 4.969081 Sekunden | ||
(base) htf@swoole-12:~/workspace/python-php/docs/benchmark$ | ||
``` | ||
|
||
Mit dem `Python` Test als Basis: | ||
|
||
| Scriptname | Set | Get | | ||
|:----------|:----:|-----:| | ||
| dict.php | 114% | 125% | | ||
| array.php | 337% | 599% | | ||
|
||
- `phpy` schreibt PHP-Code in `PyDict` mit einer Leistung, die 14% höher ist als die native Python-Leistung und 25% höher für das Lesen. | ||
- Die Leistung von PHP beim Schreiben in ein PHP-Array ist 237% höher als die Leistung von Python beim Schreiben in ein Dict und fast 500% höher für das Lesen. |
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-Kompilierung | ||
|
||
> Unterstützt nur PHP-Versionen ab 8.1 | ||
|
||
## PHP-Entwicklungsumgebung | ||
|
||
Referenz: [https://wiki.php.net/internals/windows/stepbystepbuild_sdk_2](https://wiki.php.net/internals/windows/stepbystepbuild_sdk_2) | ||
|
||
|
||
|
||
- Installieren Sie `Visual C++ 16.0`, Adresse: [https://aka.ms/vs/16/release/vs_buildtools.exe](https://aka.ms/vs/16/release/vs_buildtools.exe) | ||
|
||
- Installieren Sie `php-sdk-binary-tools`, Adresse: [https://github.com/php/php-sdk-binary-tools](https://github.com/php/php-sdk-binary-tools) | ||
|
||
- Herunterladen Sie die `php`-Quellcode | ||
|
||
- Installieren Sie die Abhängigkeiten, Adresse: [https://windows.php.net/downloads/php-sdk/deps/](https://windows.php.net/downloads/php-sdk/deps/) | ||
|
||
> Alle `PHP`-相关的 Dateien werden in dem Verzeichnis `d:\workspace` installiert | ||
|
||
## Python-Entwicklungsumgebung | ||
|
||
|
||
|
||
- Installieren Sie `Python`, Adresse: [https://www.python.org/downloads/windows/](https://www.python.org/downloads/windows/) | ||
|
||
- Legen Sie die `Path`-Umweltvariablen fest, fügen Sie `d:\python` hinzu, und führen Sie in der `Windows-Terminal` `Python -V` durch | ||
|
||
- Legen Sie die `PYTHONHOME`-Umweltvariablen fest, zeigen Sie auf `d:\python` | ||
|
||
> `Python` wird im Verzeichnis `d:\python` installiert | ||
```shell | ||
C:\WINDOWS\system32>python -V | ||
Python 3.12.1 | ||
|
||
echo %Path% | ||
echo %PYTHONHOME% | ||
``` | ||
|
||
|
||
|
||
## Build-Verzeichnis | ||
|
||
```shell | ||
cd D:\workspace\php-sdk\php-sdk-binary-tools-2.2.0 | ||
phpsdk-vs16-x64.bat | ||
``` | ||
|
||
Nach dem Erfolg betreten Sie diesen Terminal und wechseln Sie in das Verzeichnis `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 | ||
``` | ||
|
||
Erweiterungsprojekte werden im `ext` Verzeichnis von `php-src` platziert, zum Beispiel: `D:\workspace\php-sdk\php-sdk-binary-tools-2.2.0\phpdev\vs16\x64\php-8.1.5\ext\phpy`, oder Sie können `mklink` verwenden, um einen softlink zu erstellen. | ||
|
||
|
||
|
||
## Kompilierungsconfig | ||
|
||
```shell | ||
$ buildconf --force | ||
Rebuilding configure.js | ||
Jetzt führen Sie 'configure --help' durch | ||
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` bedeutet, dass die `phpy`-Erweiterung aktiviert wird und als `.dll` dynamische Link-Bibliothek kompiliert wird | ||
|
||
Nach erfolgreicher Ausführung wird das folgende Output generiert: | ||
|
||
```shell | ||
... | ||
|
||
Generierung von main/config.w32.h | ||
Generierung von phpize | ||
Fertig. | ||
|
||
|
||
Aktivierte Erweiterungen: | ||
----------------------- | ||
| Erweiterung | Modus | | ||
----------------------- | ||
| date | statisch | | ||
| hash | statisch | | ||
| json | statisch | | ||
| pcre | statisch | | ||
| phpy | geteilt | | ||
| reflection | statisch | | ||
| spl | statisch | | ||
| standard | statisch | | ||
----------------------- | ||
|
||
|
||
Aktivierte SAPIs: | ||
------------- | ||
| Sapi-Name | | ||
------------- | ||
| cli | | ||
------------- | ||
|
||
|
||
--------------------------------------- | ||
| | | | ||
--------------------------------------- | ||
| Build-Typ | Release | | ||
| Thread-Sicherheit | Nein | | ||
| Compiler | Visual C++ 2019 | | ||
| Architektur | x64 | | ||
| Optimierung | PGO ausgeschaltet | | ||
| Native Intrinsics | SSE2 | | ||
| Statische Analyzer | ausgeschaltet | | ||
--------------------------------------- | ||
|
||
|
||
Typ 'nmake' um PHP zu bauen | ||
|
||
D:\workspace\php-sdk\php-sdk-binary-tools-2.2.0\phpdev\vs16\x64\php-8.1.5 | ||
$ | ||
``` | ||
|
||
|
||
|
||
## Erweiterung kompilieren | ||
```shell | ||
nmake clean | ||
nmake | ||
``` | ||
|
||
## Binär-Paketieren | ||
|
||
```shell | ||
nmake snap | ||
``` | ||
|
||
Nach erfolgreicher Ausführung wird im Verzeichnis `D:\workspace\php-sdk\php-sdk-binary-tools-2.2.0\phpdev\vs16\x64\php-8.1.5\x64\Release` das Paket `php-8.1.5-nts-Win32-vs16-x64.zip` generiert. |
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,61 @@ | ||
# Linux/macOS/Unix-Kompilierung | ||
|
||
> Derzeit werden nur Python 3.10 oder höher unterstützt. | ||
- Ändern Sie in `config.m4` den Pfad für `Python`, der Default ist: `/opt/anaconda3` | ||
|
||
```shell | ||
phpize | ||
./configure | ||
make install | ||
``` | ||
|
||
Fügen Sie in `php.ini` `extension=phpy.so` hinzu. | ||
Verwenden Sie `php -m`, um zu sehen, ob es in der Liste erscheint. Sie können auch `php --ri phpy` verwenden, um Informationen anzuzeigen, und `php --re phpy`, um die von der Erweiterung definierte Klassen und Methoden zu sehen. | ||
|
||
```shell | ||
php -m | ||
---- | ||
``` | ||
```shell | ||
php -m | ||
[PHP Modules] | ||
bcmath | ||
bz2 | ||
Core | ||
... | ||
phpy | ||
... | ||
|
||
[Zend Modules] | ||
Zend OPcache | ||
``` | ||
|
||
Kompilierungsoptionen | ||
---- | ||
|
||
### `--with-python-dir` | ||
|
||
Geben Sie den Installationspfad für `Python` an, zum Beispiel sollte `/usr/bin/python` mit `--with-python-dir=/usr` festgelegt werden. | ||
Wenn Sie `Python` mit `conda` installiert haben, sollte es mit `/opt/anaconda3` festgelegt werden. | ||
|
||
### `--with-python-version` | ||
Geben Sie die Version von `Python` an, zum Beispiel `3.10`, `3.11`, `3.12`. Der Default verwendet `$python-dir/bin/python -V`, um die Version zu ermitteln. | ||
|
||
### `--with-python-config` | ||
Setzen Sie den Pfad für das `python-config` Executable fest. Diese Option hat Vorrang vor `--with-python-dir` und `--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.