swoole/phpy

将 Python 和 PHP 生态系统连接起来

维护者

详细信息

github.com/swoole/phpy

源代码

问题

安装: 192

依赖项: 0

建议: 0

安全性: 0

星标: 520

关注者: 15

分支: 44

开放问题: 3

语言:Python

1.0.9 2024-09-06 10:09 UTC

This package is auto-updated.

Last update: 2024-09-09 12:03:05 UTC


README

简体中文

phpy

一个用于跨语言调用 PythonPHP 的库。您可以在 PHP 中使用 Python 函数和库,或者在 Python 中使用 PHP 包。

  • 查看文档:docs/en/README.md
  • 支持 Linux/Windows/macOS
  • 不支持 Python 的 threadingasync-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

实现

它在进程的同时创建了 ZendVMCPython VM,并直接在进程堆栈空间中通过 C 函数互相调用。

负载仅限于 zval <-> PyObject 结构的转换,因此性能非常高。

在基准测试中,我们创建了一个 PyDict,并分别用 PHP 代码和 Python 代码执行了 1000 万次读写操作。

phpy 使用 PHP 代码写入 PyDict 的性能比原生 Python 高 14%,读取性能高 25%

更多详情:docs/en/benchmark.md