“ 可以在Jina Hub中分享和发现定制的Executor ”
前面教程中简单介绍了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 相关教程
👇 往期系列教程