任务例1 字符串替换

为了方便Python开发人员更高效地使用通用计算,我们提供了Python SDK,Python版本为2.x。本文档将介绍如何使用Python SDK来完成一个任务,任务目标是将文章内所有的“hate”替换为“like”。

备注:通用计算不支持外网调用,您必须申请一台北京二地域的云主机。

一、准备工作

下载Python SDK,SDK的Python版本为2.x。

二、使用SDK创建镜像仓库

1.打开config.py文件,填入云知芯账号的公私钥,代码如下:

#-*- encoding: utf-8 -*-
#配置公私钥
PRIVATE_KEY = ""   # 控制台获取  # 项目ID 请在Dashbord 上获取,通用计算项目目前不区分项目,可不填
PROJECT_ID  = ""

# API地址
COMMON_API_URL    = "https://api.auto-ai.com.cn" #管理API使用的外网域名
TASK_API_URL      = "http://api.ugc.service.auto-ai.com.cn" # 提交任务相API使用的内网域名

# region参数
REGION      = "cn-bj2"  # 区域列表,参见https://docs.auto-ai.com.cn/api-docs-az/summary/regionlist.htmltt

#token默认过期时间
TOKEN_EXPIRE_TIME=7200

2.执行CreateDockerImageBucket.py,即可创建一个mytestbucket的镜像仓库。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from sdk import apiInterface
import json
if __name__=='__main__':
    print "example 1 CreateDockerImageBucket 1"
    response = apiInterface.CreateDockerImageBucket(BucketName="mytestbucket")
    print json.dumps(response, sort_keys=True, indent=4, separators=(',', ': '))
    print ""

三、制作并上传docker镜像

1.python脚本如下:

#!usr/bin/env python
import sys
words=sys.stdin.read()
r_words=words.replace('hate','like')
with open('/tmp/result','w')  as f:
    f.write(str(r_words))
    f.close()

2.dockerfile如下,请注意docker的版本应为1.6以上。

FROM centos:latest
COPY ./replace.py /usr/bin/replace.py
RUN echo "export TERM=xterm" >> /root/.bashrc
CMD /usr/bin/python /usr/bin/replace.py

3.登录镜像仓库,UserName和MyPassword分别替换为您在云知芯的登录邮箱及登录密码

docker login -u UserName -p MyPassword cn-bj2.ugchub.service.auto-ai.com.cn

4.制作镜像,请注意将mytestbucket换成您自己创建的仓库名。

docker build -t cn-bj2.ugchub.service.auto-ai.com.cn/mytestbucket/replace:first .

5.将镜像上传至通用计算的docker仓库。

docker push cn-bj2.ugchub.service.auto-ai.com.cn/mytestbucket/replace:first

四、使用SDK提交任务

1.打开example_SubmitTaskAndGetResult.py文件,修改启动镜像名、date、输出目录、输出文件参数值。代码示例如下(去掉了异步任务的调用方法):

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from sdk import apiInterface
from sdk import tokenManager
import json
import time
import tarfile, io

 TestImageName="cn-bj2.ugchub.service.auto-ai.com.cn/kunkka/replace:3"

def untarbytes(data):
tar = tarfile.open(fileobj=io.BytesIO(data))
for member in tar.getmembers():
    f = tar.extractfile(member)
    print f.name
    print f.read()

if __name__=='__main__':
    tokenManager = tokenManager.TokenManager()
    token = tokenManager.getToken()
    print "example 1 submit sync task"
    response = apiInterface.SubmitTask(ImageName=TestImageName, AccessToken=token,
    OutputDir="/tmp", OutputFileName="result", TaskType="Sync", TaskName="testsync", Data="lilei hate lucy")

 if isinstance(response,dict):
    print "submit sync task fail" + response["Message"]
else:
    print "submit sync task success:"
    print response
    print "untarbytes:"
    untarbytes(response)
print ""

2.执行example_SubmitTaskAndGetResult.py文件,便可以看到返回结果,输出结果已经更改为lilei like lucy。

[root@10-9-34-234 pythonSdk]# python example_SubmitTaskAndGetResult.py
get :https://api.auto-ai.com.cn?Action=GetAccessToken&PublicKey=ucloudzhangpengbo%40auto-ai.com.cn1435155439000280342630&Region=cn-bj2&ExpireIn=7200&Signature=6154d4db58d8fc48d02ca95066b9f0a4f95e711e
get token success : 8dad4bc0-8b12-425b-82ee-b734357ef035
TokenManager Starting with tokenRefreshTime : 6900
example 1 submit sync task
post :http://api.ugc.service.auto-ai.com.cn?AccessToken=8dad4bc0-8b12-425b-82ee-b734357ef035&Region=cn-bj2&Signature=00d3c8d5402416492afa53553af84565a6ce1cb6&OutputFileName=result&PublicKey=ucloudzhangpengbo%40auto-ai.com.cn1435155439000280342630&ImageName=cn-bj2.ugchub.service.auto-ai.com.cn%2Fkunkka%2Freplace%3Afour&TaskType=Sync&Action=SubmitTask&TaskName=testsync&OutputDir=%2Ftmp
submit sync task success:
/tmp/result0000600000000000000000000000001712750555426011305 ustar0000000000000000lilei like lucy
untarbytes:
/tmp/result
lilei like lucy