开源 企业版 高校版 私有云 模力方舟 AI 队友
代码拉取完成,页面将自动刷新
加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
已有帐号? 立即登录
文件
master
分支 (8)
标签 (9)
master
core-spark-3.3.0
byzer-lang-3.1.1-2.3.3
TRY
pr7
mlsql-3.0
mlsql-2.4
mlsql-2.3
v0.6.15
v0.6.14
v0.6.13
v0.6.10
v0.6.8
v0.5.0
v-python-0.3.9
v3.1.1-2.3.3
v0.3.1
master
分支 (8)
标签 (9)
master
core-spark-3.3.0
byzer-lang-3.1.1-2.3.3
TRY
pr7
mlsql-3.0
mlsql-2.4
mlsql-2.3
v0.6.15
v0.6.14
v0.6.13
v0.6.10
v0.6.8
v0.5.0
v-python-0.3.9
v3.1.1-2.3.3
v0.3.1
克隆/下载
克隆/下载
提示
下载代码请复制以下命令到终端执行
为确保你提交的代码身份被 Gitee 正确识别,请执行以下命令完成配置
初次使用 SSH 协议进行代码克隆、推送等操作时,需按下述提示完成 SSH 配置
1 生成 RSA 密钥
2 获取 RSA 公钥内容,并配置到 SSH公钥
在 Gitee 上使用 SVN,请访问 使用指南
使用 HTTPS 协议时,命令行会出现如下账号密码验证步骤。基于安全考虑,Gitee 建议 配置并使用私人令牌 替代登录密码进行克隆、推送等操作
Username for 'https://gitee.com': userName
Password for 'https://userName@gitee.com': # 私人令牌
master
分支 (8)
标签 (9)
master
core-spark-3.3.0
byzer-lang-3.1.1-2.3.3
TRY
pr7
mlsql-3.0
mlsql-2.4
mlsql-2.3
v0.6.15
v0.6.14
v0.6.13
v0.6.10
v0.6.8
v0.5.0
v-python-0.3.9
v3.1.1-2.3.3
v0.3.1
serve.py 4.42 KB
一键复制 编辑 原始数据 按行查看 历史
WilliamZhu 提交于 2023年03月19日 09:53 +08:00 . update
import logging
import os
import socket
import traceback
import ray
import pyjava.utils as utils
from pyjava.api.mlsql import RayContext
from pyjava.rayfix import RayWrapper
from pyjava.serializers import \
write_with_length, \
write_int, read_int, \
SpecialLengths, ArrowStreamPandasSerializer
class SocketNotBindException(Exception):
def __init__(self, message):
Exception.__init__(self)
self.message = message
class DataServerWithId(object):
def __init__(self, host, port, server_id):
self.host = host
self.port = port
self.server_id = server_id
class OnceServer(object):
def __init__(self, host, port, timezone):
self.host = host
self.port = port
self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.socket.settimeout(5 * 60)
self.out_ser = ArrowStreamPandasSerializer(timezone, False, None)
self.is_bind = False
self.is_dev = utils.is_dev()
def bind(self):
try:
self.socket.bind((self.host, self.port))
self.is_bind = True
self.socket.listen(1)
except Exception:
print(traceback.format_exc())
return self.socket.getsockname()
def close(self):
self.socket.close()
def serve(self, data):
from pyjava.api.mlsql import PythonContext
if not self.is_bind:
raise SocketNotBindException(
"Please invoke server.bind() before invoke server.serve")
conn, addr = self.socket.accept()
sockfile = conn.makefile("rwb", int(
os.environ.get("BUFFER_SIZE", 65536)))
infile = sockfile # os.fdopen(os.dup(conn.fileno()), "rb", 65536)
out = sockfile # os.fdopen(os.dup(conn.fileno()), "wb", 65536)
try:
write_int(SpecialLengths.START_ARROW_STREAM, out)
out_data = ([df[name] for name in df] for df in
PythonContext.build_chunk_result(data, 1024))
self.out_ser.dump_stream(out_data, out)
write_int(SpecialLengths.END_OF_DATA_SECTION, out)
write_int(SpecialLengths.END_OF_STREAM, out)
out.flush()
if self.is_dev:
print("all data in ray task have been consumed.")
read_int(infile)
except Exception:
try:
write_int(SpecialLengths.ARROW_STREAM_CRASH, out)
ex = traceback.format_exc()
print(ex)
write_int(SpecialLengths.PYTHON_EXCEPTION_THROWN, out)
write_with_length(ex.encode("utf-8"), out)
out.flush()
read_int(infile)
except IOError:
# JVM close the socket
pass
except Exception:
# Write the error to stderr if it happened while serializing
print("Py worker failed with exception:")
print(traceback.format_exc())
pass
conn.close()
@ray.remote
class RayDataServer(object):
def __init__(self, server_id, java_server, port=0, timezone="Asia/Harbin"):
self.server = OnceServer(
RayWrapper().get_address(), port, java_server.timezone)
try:
(rel_host, rel_port) = self.server.bind()
except Exception as e:
print(traceback.format_exc())
raise e
self.host = rel_host
self.port = rel_port
self.timezone = timezone
self.server_id = server_id
self.java_server = java_server
self.is_dev = utils.is_dev()
def serve(self, func_for_row=None, func_for_rows=None):
try:
if func_for_row is not None:
data = (func_for_row(item)
for item in RayContext.fetch_once_as_rows(self.java_server))
elif func_for_rows is not None:
data = func_for_rows(
RayContext.fetch_once_as_rows(self.java_server))
self.server.serve(data)
except Exception as e:
logging.error(f"Fail to processing data in Ray Data Server {self.host}:{self.port}")
raise e
finally:
self.close()
def close(self):
try:
self.server.close()
except Exception:
print(traceback.format_exc())
ray.actor.exit_actor()
def connect_info(self):
return DataServerWithId(self.host, self.port, self.server_id)
Loading...
举报
举报成功
我们将于2个工作日内通过站内信反馈结果给你!
请认真填写举报原因,尽可能描述详细。
请选择举报类型
取消
发送
误判申诉

此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。

如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。

取消
提交

简介

https://github.com/byzer-org/byzer-python
暂无标签
Apache-2.0
使用 Apache-2.0 开源许可协议
取消

发行版

暂无发行版

贡献者

全部

近期动态

不能加载更多了
编辑仓库简介
简介内容
主页
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/allwefantasy/byzer-python.git
git@gitee.com:allwefantasy/byzer-python.git
allwefantasy
byzer-python
byzer-python
master
点此查找更多帮助

搜索帮助

评论
仓库举报
回到顶部
登录提示
该操作需登录 Gitee 帐号,请先登录后再操作。
立即登录
没有帐号,去注册

AltStyle によって変換されたページ (->オリジナル) /