跳转到主要内容

Backend.AI内核的用户代码执行器

项目描述

多种编程语言的通用基础运行器。

它管理一个内部任务队列,以便按照FIFO顺序处理多个命令/代码执行请求,而不混淆控制台输出。

如何编写新的计算内核

继承ai.backend.kernel.BaseRunner并实现以下方法

  • async def init_with_loop(self)

    • 在asyncio事件循环可用后调用。

    • 大部分只是pass

    • 如果您的内核支持交互式用户输入,那么将self.user_input_queue作为一个asyncio.Queue对象。这是您的工作,利用队列对象等待用户输入。(参见ai/backend/kernel/python/inproc.py中的handle_input()方法作为参考)如果没有设置,那么尝试获取交互式用户输入将直接返回"<user-input is unsupported>"

  • async def build_heuristic(self)

    • (批量模式)编写一个启发式代码,找到一些构建脚本或运行足够好的构建命令。

    • (阻塞)您不必担心重叠执行,因为基础运行器会处理。

  • async def execute_heuristic(self)

    • (批量模式)编写一个启发式代码,找到主程序。

    • (阻塞)您不必担心重叠执行,因为基础运行器会处理。

  • async def query(self, code_text)

    • (查询模式)直接运行给定的代码片段。根据语言/运行时,您可能需要创建一个临时文件并执行外部程序。

    • (阻塞)您不必担心重叠执行,因为基础运行器会处理。

  • async def complete(self, data)

    • (查询模式) 接收一个包含用户当前输入代码行的字典数据,并返回一个可以自动完成的字符串列表。

    • (非阻塞) 应该实现此方法以异步方式与代码执行同时运行。

  • async def interrupt(self)

    • (查询模式) 向正在运行的程序发送中断信号。实现方式由您决定。当前的Python运行器为进程内的查询模式执行启动一个线程,并使用ctypes黑客技术将其中的KeyboardInterrupt异常抛出。

    • (非阻塞) 应该实现此方法以异步方式与代码执行同时运行。

注意:现有代码是良好的参考!

如何在Backend.AI计算内核中使用它

使用pip通过Dockerfile中的RUN指令安装此软件包。然后,设置如下的CMD指令

CMD ["/home/backend.ai/jail", "-policy", "/home/backend.ai/policy.yml", \
     "/usr/local/bin/python", "-m", "ai.backend.kernel", "<language>"]

其中<language>应该是ai/backend/kernel/__main__.py文件中定义的lang_map变量支持的编程语言名称之一。

项目详情


下载文件

下载您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源代码分发

backend.ai-kernel-runner-1.4.2.tar.gz (22.8 kB 查看哈希值)

上传时间 源代码

构建分发

backend.ai_kernel_runner-1.4.2-py3-none-any.whl (40.3 kB 查看哈希值)

上传时间 Python 3

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面