Jina 轻松学 —— 深入Executor

 可以在Jina Hub中分享和发现定制的Executor 

c987419809c4d6611876b3aa205edba5.png

前面教程中简单介绍了Executor的使用,今天我们会深入Executor的细节,教你完成Executor的创建,并上传到Jina Hub中分享给全世界使用。

我们将构造一个logger Executor —— 把输入文档的日志信息保存到本地

Let's begin🏃‍♀️

 安装和配置 


运行下面的指令安装Jina

pip install jina[standard]

💡 Jina安装小提示:

  • 推荐在一个新的python虚拟环境中安装Jina,

  • 避免依赖冲突

 开始构造logger Executor 


在Jina Hub中创建Executor 

jina hub new

💡 Jina Hub运行小提示:

  • 运行命令后,按照指引输入Executor的

    名称(RequestLogger)和指定存储文件夹

  • 可进行更高级的配置(本教程不包含)

    创建成功后指定文件夹中的文件结构如下

RequestLogger/
├── config.yml
├── executor.py
├── manifest.yml
├── README.md
└── requirements.txt

Executor赋能

Step1:Executor初始构造

  打开文件夹中的executor.py文件进行编辑:

import os
import time
from typing import Dict

from jina import Executor, DocumentArray, requests
from jina.logging.logger import JinaLogger

class RequestLogger(Executor):           # needs to inherit from Executor
    def __init__(self,
                default_log_docs: int = 1, # your arguments
                *args, **kwargs):          # *args and **kwargs are required for Executor
        super().__init__(*args, **kwargs) # before any custom logic
        self.default_log_docs = default_log_docs
        self.logger = JinaLogger('req_logger')
        self.log_path = os.path.join(self.workspace, 'log.txt')
        if not os.path.exists(self.log_path):
            with open(self.log_path, 'w'): pass

 💡 Executor初始化小提示:

  • RequestLogger继承了Executor类

  • default_log_docs指定每次处理的Decement 数量

  • 创建一个JinaLogger的实例并指定日志储存位置

  Step2:Executor的log函数构造

@requests
def log(self, # arguments are automatically received
        docs,
        parameters: Dict,
        **kwargs):
    self.logger.info('Request being processed...')

    nr_docs = int(parameters.get('log_docs', self.default_log_docs)) # accesing parameters (nr are passed as float due to Protobuf)
    with open(self.log_path, 'a') as f:
        f.write(f'request at time {time.time()} with {len(docs)} documents:\n')
        for i, doc in enumerate(docs):
            f.write(f'\tsearching with doc.id {doc.id}. content = {doc.content}\n')
            if i + 1 == nr_docs:
                break

 💡 Log函数小提示:

  • 为在Flow中可以被调用,需使用@request函数修饰器

  • @request可以设置on=参数,以指定函数在特定的请求条件下工作

 上传分享Executor 


完成RequestLogger的构建后,我们可将其上传到Jina Hub中分享给全世界使用

jina hub push --public .

 使用Executor 


上传到 Jina Hub后,你的Executor就可以让其他小伙伴任意使用了。使用的方式非常多样,我们这里介绍常用的docker方法

from jina import Flow

f=Flow().add(
    uses='jinahub+docker://RequestLogger',
    uses_with={
     'default_log_docs': 3
    }
)

with f:
    ...

💡 Executor使用小提示:

  • 可通过Docker方法或纯代码方式使用

  • Docker 可以运行在本地或云端

  • 可通过定义Yaml文件使用

 ⭐️Jina轻松学系列教程将不断更新 ⭐️

 ⭐️敬请持续关注 ⭐️ 

点击下方 “阅读原文”,获得更详细的Jina 相关教程


👇 往期系列教程

dec160411b7181df25f27476654313e8.png

Jina 轻松学 —— 部署和运行

228a46e72ec0d3f9e36851a02a6bc9db.png

Jina 轻松学 —— 三个基本元素

26285f41bef621de3bf59beffafa3a55.png

Jina 2.0 快速入门指"北"

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值