swoole / phpy
将 Python 和 PHP 生态系统连接起来
1.0.9
2024-09-06 10:09 UTC
Requires
- php: >=8.1
- ext-phpy: *
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.40
- phpunit/phpunit: ^10.4
README
phpy
一个用于跨语言调用 Python
和 PHP
的库。您可以在 PHP 中使用 Python 函数和库,或者在 Python 中使用 PHP 包。
- 查看文档:docs/en/README.md
- 支持
Linux
/Windows
/macOS
- 不支持 Python 的
threading
或async-io
功能
py2php
py2php 是一个在线工具,可以将 Python 代码自动转换为 PHP 代码。
从 PHP 调用 Python
将 phpy.so 作为扩展编译和安装,并在 php.ini
中添加 extension=phpy.so
。
PHP 示例
$os = PyCore::import("os"); echo $os->uname();
Transformers
$transformers = PyCore::import('transformers'); $AutoTokenizer = $transformers->AutoTokenizer; $AutoModelForSequenceClassification = $transformers->AutoModelForSequenceClassification; $os = PyCore::import('os'); $os->environ['https_proxy'] = getenv('https_proxy'); $tokenizer = $AutoTokenizer->from_pretrained("lxyuan/distilbert-base-multilingual-cased-sentiments-student"); $model = $AutoModelForSequenceClassification->from_pretrained("lxyuan/distilbert-base-multilingual-cased-sentiments-student");
从 Python 调用 PHP
简单地将其作为 C++ 模块导入。
Python 示例
import phpy content = phpy.call('file_get_contents', 'test.txt') o = phpy.Object('redis') assert o.call('connect', '127.0.0.1', 6379) rdata = phpy.call('uniqid') assert o.call('set', 'key', rdata) assert o.call('get', 'key') == rdata
实现
它在进程的同时创建了 ZendVM
和 CPython VM
,并直接在进程堆栈空间中通过 C 函数互相调用。
负载仅限于 zval <-> PyObject
结构的转换,因此性能非常高。
在基准测试中,我们创建了一个 PyDict
,并分别用 PHP 代码和 Python 代码执行了 1000 万次读写操作。
phpy 使用 PHP 代码写入 PyDict
的性能比原生 Python 高 14%
,读取性能高 25%
。
更多详情:docs/en/benchmark.md