• 关于 python 数个数 的搜索结果

问题

python中数组怎么取元素个数

云计算小粉 2019-12-01 19:59:56 1249 浏览量 回答数 1

问题

Python 数组翻转指定个数的元素

游客ejnn55cgkof5g 2020-02-14 18:02:11 1 浏览量 回答数 1

问题

python中数组怎么取元素个数组长度

云计算小粉 2019-12-01 20:03:08 1463 浏览量 回答数 1

海外云虚拟主机包年25元/月起

海外独享虚拟主机全面上线,助力构建海外网站,提升公司国际形象;全球有效覆盖,超高性价比;建站入门首选,助力出口,适合跨境贸易企业。

问题

【精品问答】Python3 实例80问(附源码解析)

珍宝珠 2020-02-17 13:11:47 442 浏览量 回答数 2

回答

学习Python的人都知道数组是最常用的的数据类型,为了保证程序的正确性,需要调试程序。 因此,需要在程序中控制台中打印数组的全部元素,如果数组的容量较小,例如 只含有10个元素,采用print命令或print函数可以答应出数组中的每个元素; 如果数组的容量过大,只能打印出数组的部分元素,打印结果只包含开始部分元素和结尾部分元素,中间元素省略。省略的部分不利于程序的调试; 因此,为了方便调试程序,需要将数组中的元素全部打印出来。 少量元素情况 ? 1234 打印数组中的元素 import numpy as npa = np.array(6)print a 程序结果为: ? 1 [0 1 2 3 4 5] 大量元素情况 可以采用 set_printoptions(threshold='nan') ? 1234 import numpy as npnp.set_printoptions(threshold=np.NaN)print np.arange(100)print np.arange(100).reshape(10, 10) 结果为: [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99] [[ 0 1 2 3 4 5 6 7 8 9] [10 11 12 13 14 15 16 17 18 19] [20 21 22 23 24 25 26 27 28 29] [30 31 32 33 34 35 36 37 38 39] [40 41 42 43 44 45 46 47 48 49] [50 51 52 53 54 55 56 57 58 59] [60 61 62 63 64 65 66 67 68 69] [70 71 72 73 74 75 76 77 78 79] [80 81 82 83 84 85 86 87 88 89] [90 91 92 93 94 95 96 97 98 99]] 当array里面的存放的数据维度过大时,在控制台会出现不能将array完全输出的情况,中间部分的结果会用省略号打印出来。这时就需要用到numpy里面的set_printoptions()方法 我们来看一下 set_printoptions 方法的简单说明 ? 12345678 set_printoptions(precision=None, threshold=None, edgeitems=None, linewidth=None, suppress=None, nanstr=None, infstr=None, formatter=None) precision:输出结果保留精度的位数 threshold:array数量的个数在小于threshold的时候不会被折叠 edgeitems:在array已经被折叠后,开头和结尾都会显示edgeitems个数 formatter:这个很有意思,像python3里面str.format(),就是可以对你的输出进行自定义的格式化 举例: precision: ? 123 np.set_printoptions(precision=4)print(np.array([1.23456789])) [ 1.2346] # 最后进位了 threshold: ? 123456 np.set_printoptions(threshold=10)print(np.arange(1, 11, 1)) # np.arange(1, 11, 1)生成出来是[1-10],10个数 [ 1 2 3 4 5 6 7 8 9 10] np.set_printoptions(threshold=9)print(np.arange(1, 11, 1)) [ 1 2 3 ..., 8 9 10] edgeitems: ? 123456 np.set_printoptions(threshold=5)print(np.arange(1, 11, 1)) [ 1 2 3 ..., 8 9 10] np.set_printoptions(threshold=5, edgeitems=4)print(np.arange(1, 11, 1)) [ 1 2 3 4 ..., 7 8 9 10] formatter ? 123 np.set_printoptions(formatter={'all': lambda x: 'int: ' + str(-x)})print(np.arange(1, 5, 1)) [int: -1 int: -2 int: -3 int: -4] 这个formatter是一个可调用的字典,'all'是其中一个key,表示里面的x可以包含所有type,还有其他key,具体可以在源码里面查看最后如果只想在代码中的某一部分使用自定义的printoptions,那么可以通过再次调用np.set_printoptions()这个方法来进行reset sublime也是一款常用的文本编辑器,当我们在对python文件进行编辑的时候,我们可以在首选项里进行配置来快速运行python文件; 方法/步骤我们用sublime打开一个python文件,我们要怎么运行它呢,如图所示;如何在sublime上运行python我们点击"首选项/浏览包",点开之后出来一个目录图形窗口,我们找到python文件夹,如果没有我们新建一个,如图所示;如何在sublime上运行python如何在sublime上运行python在python文件夹里,我们再建一个文件命名为 Python.sublime-commands,如图所示;如何在sublime上运行python然后我们写入如下内容,path那一行要换成自己的python安装路径;{"cmd":["python.exe", "-u", "$file"],"path":"D:python3.6","file_regex": "^[ ]File "(...?)", line ([0-9]*)","selector": "source.python"}如何在sublime上运行python修改好之后我们点击保存,我们点击"Tools/Bulid System/Python",如图所示;如何在sublime上运行python然后我们回到之前的python文件,我们点击"Tools/Bulid"(快捷键是Ctrl+B,后面就按快捷键了),可以看到运行的结果,如图所示;如何在sublime上运行python如何在sublime上运行python我们再打开一个有错误的python文件,运行看一下效果,如图所示;如何在sublime上运行python

xuning715 2019-12-02 01:10:43 0 浏览量 回答数 0

回答

content = input('请输入内容:计算十进制小数个数和字母个数 ') num = 0 zimu = 0 for n in content: if n.isdecimal() == True: num+=1 # print ('数字个数 ',(num)) elif n.isalpha() == True: zimu+=1 # print ('字母个数',zimu) else: pass print ('数字个数 ',(num)) print ('字母个数',zimu) C:\python35\python3.exe D:/pyproject/day11数据类型的方法/str-way.py 请输入内容:计算十进制小数个数和字母个数 56gou<<<ijh78 数字个数 4 字母个数 6

珍宝珠 2019-12-02 03:23:56 0 浏览量 回答数 0

问题

【精品问答】python技术1000问(1)

问问小秘 2019-12-01 21:57:48 448858 浏览量 回答数 12

问题

【精品问答】Python实战100例 - 附源码

珍宝珠 2019-12-01 22:01:18 7689 浏览量 回答数 8

问题

2018python技术问答集锦,希望能给喜欢python的同学一些帮助

技术小能手 2019-12-01 19:31:10 2040 浏览量 回答数 2

问题

【python学习全家桶】263道python热门问题,阿里百位技术专家答疑解惑

管理贝贝 2019-12-01 20:07:21 7217 浏览量 回答数 2

问题

emapreduce的hadoop map的个数

封神 2019-12-01 19:27:15 1068 浏览量 回答数 1

问题

如何在不创建新数组的情况下用另一个数组扩展现有的JavaScript数组

保持可爱mmm 2020-01-13 17:31:12 1 浏览量 回答数 1

问题

python从四个数组,如何同时根据三个条件筛选出一个数组?

茶什i 2019-12-01 19:53:10 14 浏览量 回答数 1

回答

少量元素情况打印数组中的元素import numpy as npa = np.array(6)print a程序结果为:[0 1 2 3 4 5]大量元素情况可以采用 set_printoptions(threshold='nan')import numpy as npnp.set_printoptions(threshold=np.NaN)print np.arange(100)print np.arange(100).reshape(10, 10)结果为:[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99] [[ 0 1 2 3 4 5 6 7 8 9] [10 11 12 13 14 15 16 17 18 19] [20 21 22 23 24 25 26 27 28 29] [30 31 32 33 34 35 36 37 38 39] [40 41 42 43 44 45 46 47 48 49] [50 51 52 53 54 55 56 57 58 59] [60 61 62 63 64 65 66 67 68 69] [70 71 72 73 74 75 76 77 78 79] [80 81 82 83 84 85 86 87 88 89] [90 91 92 93 94 95 96 97 98 99]]当array里面的存放的数据维度过大时,在控制台会出现不能将array完全输出的情况,中间部分的结果会用省略号打印出来。这时就需要用到numpy里面的set_printoptions()方法我们来看一下 set_printoptions 方法的简单说明set_printoptions(precision=None, threshold=None, edgeitems=None, linewidth=None, suppress=None, nanstr=None, infstr=None, formatter=None) precision:输出结果保留精度的位数threshold:array数量的个数在小于threshold的时候不会被折叠edgeitems:在array已经被折叠后,开头和结尾都会显示edgeitems个数formatter:这个很有意思,像python3里面str.format(),就是可以对你的输出进行自定义的格式化

ylrf1212 2019-12-02 01:07:23 0 浏览量 回答数 0

回答

python中的队列分类可分为两种:1.线程Queue,也就是普通的Queue2.进程Queue。Queue的种类:FIFO: Queue.Queue(maxsize=0)FIFO即First in First Out,先进先出。Queue提供了一个基本的FIFO容器,使用方法很简单,maxsize是个整数,指明了队列中能存放的数据个数的上限。一旦达到上限,插入会导致阻塞,直到队列中的数据被消费掉。如果maxsize小于或者等于0,队列大小没有限制。LIFOQueue.LifoQueue(maxsize=0)LIFO即Last in First Out,后进先出。与栈的类似,使用也很简单,maxsize用法同上priorityclass Queue.PriorityQueue(maxsize=0)构造一个优先队列。maxsize用法同上。基本方法:   Queue.Queue(maxsize=0) FIFO, 如果maxsize小于1就表示队列长度无限 Queue.LifoQueue(maxsize=0) LIFO, 如果maxsize小于1就表示队列长度无限 Queue.qsize() 返回队列的大小 Queue.empty() 如果队列为空,返回True,反之False Queue.full() 如果队列满了,返回True,反之False Queue.get([block[, timeout]]) 读队列,timeout等待时间 Queue.put(item, [block[, timeout]]) 写队列,timeout等待时间 Queue.queue.clear() 清空队列 其他: task_done()意味着之前入队的一个任务已经完成。由队列的消费者线程调用。每一个get()调用得到一个任务,接下来的task_done()调用告诉队列该任务已经处理完毕。如果当前一个join()正在阻塞,它将在队列中的所有任务都处理完时恢复执行(即每一个由put()调用入队的任务都有一个对应的task_done()调用)。join()阻塞调用线程,直到队列中的所有任务被处理掉。只要有数据被加入队列,未完成的任务数就会增加。当消费者线程调用task_done()(意味着有消费者取得任务并完成任务),未完成的任务数就会减少。当未完成的任务数降到0,join()解除阻塞。

大财主 2019-12-02 01:06:53 0 浏览量 回答数 0

回答

简介编辑Python科学计算Python科学计算VPython是一套简单易用的三维图形库,使用它可以快速创建三维场景和动画。和TVTK相比,它更适合于创建交互式的三维场景,而TVTK则更适合于对数据进行三维可视化。本章将通过几个实例介绍如何使用VPython制作实时、交互式的三维动画演示程序。 [1] 制作动画演示编辑用VPython制作动画的简单之处在于:只要在一个循环体中不断地修改场景中的各个模型以及照相机的各种属性,即可实现动画效果。与场景交互编辑为了和场景中的物体进行交互,VPython提供了如下方便实用的功能:键盘和鼠标事件的处理。控件窗口和4种控件(按钮、滚动条、开关及菜单),用于制作简单的用户界面。绘图窗口,用于绘制二维坐标图。由于篇幅受限,本书只介绍键盘和鼠标事件的处理,请读者参考VPython的文档和演示程序来自学其他部分的内容。响应键盘事件通过场景窗口对象的kb属性可以获得按键信息。kb.keys是窗口中等待处理的键盘事件的个数,调用kb.getkey()可以从键盘事件队列中获取一个待处理的事件。如果队列为空,getkey()将一直等待,直到产生键盘事件为止。getkey()的返回值是一个描述按键的字符串。下面是一个简单的键盘事件测试程序,可以用它查看各个按键的名称。响应鼠标事件鼠标射线和鼠标各个坐标属性之间的关系鼠标射线和鼠标各个坐标属性之间的关系鼠标事件和键盘事件类似,通过场景窗口对象的mouse属性进行鼠标事件的处理。鼠标的坐标是二维视图平面上的一个点,在三维空间中有一条直线上的点都将投影到这个位置,我们称此直线为鼠标射线。scene.mouse是一个mouse_object对象,下面列出它的属性和方法。为了便于理解,右图显示了鼠标射线和pos、pickpos等属性之间的关系。pos:鼠标在三维空间中的坐标,此坐标是鼠标射线与经过点scene.center且平行于屏幕的平面的交点。button:描述鼠标按键的字符串,值可以为None、'left'、'right'、'wheel'。此属性只有在产生事件时才不为None。pick:用鼠标选中的物体对象,与鼠标射线相交的第一个物体。pickpos:鼠标射线与pick物体的表面的交点坐标。camera:当前照相机的位置坐标,旋转或缩放场景时会发生变化。ray:从camera到pos的单位方向矢量,也就是鼠标射线的方向,它正好和窗口视图垂直。鼠标射线在三维空间中的参数方程为camera+t*ray,其中t是一个大于0的任意参数。alt、ctrl、shift:Alt、Ctrl、Shift三个按键的状态。project():计算鼠标射线与任意平面的交点,平面由表示法线方向的normal参数和表示平面上某点坐标的point参数指定。因为与屏幕平行的面的法线方向为scene. forward,所以下面语句的计算结果与scene.mouse.pos相同:scene.mouse.project(normal=scene.forward, point=scene.center)events:待处理的鼠标事件的数目。getevent():从鼠标事件队列中获取最早的鼠标事件。如果队列为空就一直等待事件的发生。getevent()返回的事件对象保存事件发生时的鼠标坐标,也具有上述的属性和方法。除此之外,事件对象还有press、click、drag、drop、release等属性,它们是描述鼠标按键的字符串,分别是产生“按下”、“单击”、“拖”、“放”、“松开”5种鼠标事件的按钮名称。用界面控制场景编辑用TraitsUI的界面控制Visual场景用TraitsUI的界面控制Visual场景VPython提供了一种控制窗口,可以放置按钮、开关及滚动条等简单控件,用以实时设置场景中的物体。但是这些控件不但功能有限,而且不是标准的界面控件,操作起来不是很方便。本节介绍如何使用TraitsUI制作一个能控制VPython场景的界面。VPython和TraitsUI各有自己的独立窗口,TraitsUI界面有自己的消息循环,而Visual窗口有自己的动画控制和消息处理循环。因此我们需要使用多线程或多进程方式,让这两个循环互不影响。下面是使用多线程实现TraitsUI控制场景的完整程序。创建复杂模型编辑VPython只提供了一些简单的立体几何形状,如果要创建复杂的物体,就需要用户自己编写程序,计算物体的多边形网格模型数据,并使用faces()将数据转换为模型进行显示。任何一个三维模型都可以用许多三角形的面来表示,对于每个三角形的每个顶点,我们需要计算如下数据:顶点的坐标:三个浮点数表示的三维坐标。顶点的法线方向:三个浮点数表示的三维方向矢量。顶点的颜色:三个浮点数表示的红、绿、蓝颜色分量。将保存上述数据的三个数组传递给faces()即可创建三维模型。对于一个有N个三角形的模型,每个数组的长度都是33N,也可以传递一个形状为(3*N,3)的二维数组。

xuning715 2019-12-02 01:10:23 0 浏览量 回答数 0

问题

将JS数组拆分为N个数组

保持可爱mmm 2020-02-08 20:39:02 0 浏览量 回答数 1

问题

python pillow做字符图出现问题搞不懂? 400 报错

爱吃鱼的程序员 2020-05-30 21:59:27 0 浏览量 回答数 1

问题

python pillow做字符图出现问题搞不懂?报错

爱吃鱼的程序员 2020-06-09 15:02:35 0 浏览量 回答数 1

问题

读取文件然后停止然后继续直到给定的行

is大龙 2020-03-21 11:27:39 7 浏览量 回答数 2

回答

首先让我们看一下数据 path = os.getcwd() + '\data\ex1data2.txt' data2 = pd.read_csv(path, header=None, names=['Size', 'Bedrooms', 'Price']) data2.head() Size Bedrooms Price 0 2104 3 399900 1 1600 3 329900 2 2400 3 369000 3 1416 2 232000 4 3000 4 539900 每个变量值的大小都是不同的,一个房子大约有2-5个卧室,可能每个房间的大小都不一样,如果我们在这个数据集上运行原来的回归算法,那么“size”影响的权重就太大了,就会降低“number of bedrooms”的影响,为了解决这个问题,我们需要做一些所谓的“特征标准化”。也就是需要调整特征的比例来平衡竞争关系。一种方法是用特征的均值减去另一个特征的均值,然后除以标准差。这是使用的pandas的代码。 data2= (data2- data2.mean())/ data2.std() data2.head() 接下来我们需要修改练习一中的线性回归的实现,以处理多个因变量。下面是梯度下降函数的代码。 def gradientDescent(X, y, theta, alpha, iters): temp = np.matrix(np.zeros(theta.shape)) parameters = int(theta.ravel().shape[1]) cost = np.zeros(iters) for i in range(iters): error = (X * theta.T) - y for j in range(parameters): term = np.multiply(error, X[:,j]) temp[0,j] = theta[0,j] - ((alpha / len(X)) * np.sum(term)) theta = temp cost[i] = computeCost(X, y, theta) return theta, cost 仔细观察计算误差项的代码行error = (X * theta.T) – y,我们会在矩阵运算中一直使用它。这是线性代数在工作中的力量:不管X中有多少变量(列),只要参数的个数是一致的,这个代码就能正常工作。类似地,只要y中的行数允许,它将计算X中每行的错误项。这是一种将ANY表达式一次性应用于大量实例的有效方法。 由于我们的梯度下降和成本函数都使用矩阵运算,所以处理多元线性回归所需的代码实际上没有变化。我们来测试一下,首先通过初始化创建适当的矩阵来传递函数。 # add ones column data2.insert(0, 'Ones', 1) # set X (training data) and y (target variable) cols = data2.shape[1] X2 = data2.iloc[:,0:cols-1] y2 = data2.iloc[:,cols-1:cols] # convert to matrices and initialize theta X2 = np.matrix(X2.values) y2 = np.matrix(y2.values) theta2 = np.matrix(np.array([0,0,0])) 现在运行,看会发生什么 # perform linear regression on the data set g2, cost2 = gradientDescent(X2, y2, theta2, alpha, iters) # get the cost (error) of the model computeCost(X2, y2, g2) 0.13070336960771897 我们可以绘制训练过程,确认实际误差随着每次迭代梯度下降而减少。 fig, ax = plt.subplots(figsize=(12,8)) ax.plot(np.arange(iters), cost2, 'r') ax.set_xlabel('Iterations') ax.set_ylabel('Cost') ax.set_title('Error vs. Training Epoch') 解决方案的成本或误差随着每个成功的迭代而下降,直到它触底。这正是我们希望发生的事情。我们的算法起作用了。 Python的伟大之处在于它的庞大的开发者社区和丰富的开源软件。在机器学习领域,顶级Python库是scikit-learn。让我们看看如何使用scikit- learn的线性回归类来处理第一部分的简单线性回归任务。 from sklearn import linear_model model = linear_model.LinearRegression() model.fit(X, y) 没有比这更简单的了。“fit”方法有很多参数,我们可以根据我们想要的算法来调整参数,默认值可以感测到遗留下来的问题。试着绘制拟合参数,和之前的结果比较。 x = np.array(X[:, 1].A1) f = model.predict(X).flatten() fig, ax = plt.subplots(figsize=(12,8)) ax.plot(x, f, 'r', label='Prediction') ax.scatter(data.Population, data.Profit, label='Traning Data') ax.legend(loc=2) ax.set_xlabel('Population') ax.set_ylabel('Profit') ax.set_title('Predicted Profit vs. Population Size') 可参考:https://www.johnwittenauer.net/machine-learning-exercises-in-python-part-2/)

珍宝珠 2019-12-02 03:22:32 0 浏览量 回答数 0

回答

0 背景 AttachCluster作业是批量计算最新推出的作业类型。它结合了固定集群作业和AutoCluster作业的优势,既能自动管理集群生命周期,弹性伸缩资源,又能使用分布式缓存节省资源。本文的目的在于介绍在阿里云批量计算服务上运行AttachCluster作业。 1 准备工作 1.1 开通阿里云批量计算服务 要使用批量计算服务,请根据官方文档里面的指导开通批量计算和其依赖的相关服务,如OSS等。 1.2 升级Python SDK 若您未安装批量计算Python SDK,请您参照安装方法安装该SDK。如果您检查已经安装之后,请您参照Python SDK升级方法, 升级批量计算Python SDK至最新版。 2 创建集群 AttachCluster作业首次使用时,需要创建一个集群,创建方法可参考官方文档 。该集群对配置没有特殊需求,实例数可设置为0。以下是创建集群的Python源代码。 import time import random import string import batchcompute from batchcompute import CN_SHENZHEN as REGION from batchcompute import Client, ClientError from batchcompute.resources import ( JobDescription, TaskDescription, DAG, GroupDescription, ClusterDescription, Configs, Networks, VPC, Classic, Mounts, Notification, Topic ) ACCESS_KEY_ID = 'Your Access Key Id' ACCESS_KEY_SECRET = 'Your Access Key Secret' IMAGE_ID = 'img-ubuntu' INSTANCE_TYPE = 'ecs.sn2ne.large' client = Client(REGION, ACCESS_KEY_ID, ACCESS_KEY_SECRET) def create_cluster(idempotent_token=''): try: # Cluster description. cluster_desc = ClusterDescription() cluster_desc.Name = "test-cluster" cluster_desc.Description = "demo" cluster_desc.ImageId = IMAGE_ID cluster_desc.InstanceType = INSTANCE_TYPE #Group description group_desc1 = GroupDescription() group_desc1.DesiredVMCount = 4 group_desc1.InstanceType = 'ecs.sn1ne.large' #user group special instance type group_desc1.ResourceType = 'OnDemand' cluster_desc.add_group('group1', group_desc1) #cluster_desc.add_group('group2', group_desc2) #Configs configs = Configs() #Configs.Disks configs.add_system_disk(50, 'cloud_efficiency') configs.add_data_disk(500, 'cloud_efficiency', '/home/my-data-disk') #Configs.Networks networks = Networks() vpc = VPC() vpc.CidrBlock = '192.168.0.0/16' #vpc.VpcId = 'vpc-xxxxx' networks.VPC = vpc configs.Networks = networks cluster_desc.Configs = configs print cluster_desc rsp = client.create_cluster(cluster_desc, idempotent_token) # get cluster id for attach cluster job return rsp.Id except ClientError, e: print (e.get_status_code(), e.get_code(), e.get_requestid(), e.get_msg()) return "" if name == 'main': #Not Use idempotent token cluster_id = create_cluster() print cluster_id 3 创建作业 在创建作业的时候需要步骤2中的集群Id,填入task的AutoCluster的ClusterId字段中。以下是创建作业的Python源代码。 from batchcompute import Client, ClientError from batchcompute import CN_ZHANGJIAKOU as REGION from batchcompute.resources import ( ClusterDescription, GroupDescription, Configs, Networks, VPC, JobDescription, TaskDescription, DAG,Mounts, AutoCluster,Disks,Notification, ) access_key_id = "" # your access key id access_key_secret = "" # your access key secret image_id = "m-8vbd8lo9xxxx" # the id of a image created before,镜像需要确保已经注册给批量计算 instance_type = "ecs.sn1.medium" # instance type inputOssPath = "oss://xxx/input/" # your input oss path outputOssPath = "oss://xxx/output/" #your output oss path stdoutOssPath = "oss://xxx/log/stdout/" #your stdout oss path stderrOssPath = "oss://xxx/log/stderr/" #your stderr oss path def getAutoClusterDesc(): auto_desc = AutoCluster() # attach cluster这里里填入上一步创建的集群Id auto_desc.ClusterId = cls-xxxxx auto_desc.ECSImageId = image_id auto_desc.ReserveOnFail = False # 实例规格 auto_desc.InstanceType = instance_type #case1 设置上限价格的竞价实例; # auto_desc.ResourceType = "Spot" # auto_desc.SpotStrategy = "SpotWithPriceLimit" # auto_desc.SpotPriceLimit = 0.5 #case2 系统自动出价,最高按量付费价格 # auto_desc.ResourceType = "Spot" # auto_desc.SpotStrategy = "SpotAsPriceGo" #case3 按量 auto_desc.ResourceType = "OnDemand" #Configs configs = Configs() #Configs.Networks networks = Networks() vpc = VPC() #case1 只给CidrBlock vpc.CidrBlock = '192.168.0.0/16' #case2 CidrBlock和VpcId 都传入,必须保证VpcId的CidrBlock 和传入的CidrBlock保持一致 # vpc.CidrBlock = '172.26.0.0/16' # vpc.VpcId = "vpc-8vbfxdyhxxxx" networks.VPC = vpc configs.Networks = networks # 设置系统盘type(cloud_efficiency/cloud_ssd)以及size(单位GB) configs.add_system_disk(size=40, type_='cloud_efficiency') #设置数据盘type(必须和系统盘type保持一致) size(单位GB) 挂载点 # case1 linux环境 # configs.add_data_disk(size=40, type_='cloud_efficiency', mount_point='/path/to/mount/') # case2 windows环境 # configs.add_data_disk(size=40, type_='cloud_efficiency', mount_point='E:') # 设置节点个数 configs.InstanceCount = 1 auto_desc.Configs = configs return auto_desc def getDagJobDesc(clusterId = None): job_desc = JobDescription() dag_desc = DAG() mounts_desc = Mounts() job_desc.Name = "testBatchSdkJob" job_desc.Description = "test job" job_desc.Priority = 1 # 订阅job完成或者失败事件 noti_desc = Notification() noti_desc.Topic['Name'] = "test-topic" noti_desc.Topic['Endpoint'] = "http://[UserId].mns.[Region].aliyuncs.com/" noti_desc.Topic['Events'] = ["OnJobFinished", "OnJobFailed"] # job_desc.Notification = noti_desc job_desc.JobFailOnInstanceFail = False # 作业运行成功后户自动会被立即释放掉 job_desc.AutoRelease = False job_desc.Type = "DAG" echo_task = TaskDescription() # echo_task.InputMapping = {"oss://xxx/input/": "/home/test/input/", # "oss://xxx/test/file": "/home/test/test/file"} echo_task.InputMapping = {inputOssPath: "/home/test/input/"} echo_task.OutputMapping = {"/home/test/output/":outputOssPath} #触发程序运行的命令行 #case1 执行linux命令行 echo_task.Parameters.Command.CommandLine = "/bin/bash -c 'echo BatchcomputeService'" #case2 执行Windows CMD.exe # echo_task.Parameters.Command.CommandLine = "cmd /c 'echo BatchcomputeService'" #case3 输入可执行文件 # PackagePath存放commandLine中的可执行文件或者二进制包 # echo_task.Parameters.Command.PackagePath = "oss://xxx/package/test.sh" # echo_task.Parameters.Command.CommandLine = "sh test.sh" # 设置程序运行过程中相关环境变量信息 echo_task.Parameters.Command.EnvVars["key1"] = "value1" echo_task.Parameters.Command.EnvVars["key2"] = "value2" # 设置程序的标准输出地址,程序中的print打印会实时上传到指定的oss地址 echo_task.Parameters.StdoutRedirectPath = stdoutOssPath # 设置程序的标准错误输出地址,程序抛出的异常错误会实时上传到指定的oss地址 echo_task.Parameters.StderrRedirectPath = stderrOssPath # 设置任务的超时时间 echo_task.Timeout = 600 # 设置任务所需实例个数 # 环境变量BATCH_COMPUTE_INSTANCE_ID为0到InstanceCount-1 # 在执行程序中访问BATCH_COMPUTE_INSTANCE_ID,实现数据访问的切片实现单任务并发执行 echo_task.InstanceCount = 1 # 设置任务失败后重试次数 echo_task.MaxRetryCount = 0 # NAS数据挂载 #采用NAS时必须保证网络和NAS在同一个VPC内 nasMountEntry = { "Source": "nas://xxxx.nas.aliyuncs.com:/", "Destination": "/home/mnt/", "WriteSupport":True, } mounts_desc.add_entry(nasMountEntry) mounts_desc.Locale = "utf-8" mounts_desc.Lock = False # echo_task.Mounts = mounts_desc # attach cluster作业该集群字段设置为空 echo_task.ClusterId = "" echo_task.AutoCluster = getAutoClusterDesc() # 添加任务 dag_desc.add_task('echoTask', echo_task) # 可以设置多个task,每个task可以根据需求进行设置各项参数 # dag_desc.add_task('echoTask2', echo_task) # Dependencies设置多个task之间的依赖关系,echoTask2依赖echoTask;echoTask3依赖echoTask2 # dag_desc.Dependencies = {"echoTask":["echoTask2"], "echoTask2":["echoTask3"]} job_desc.DAG = dag_desc return job_desc if name == "main": client = Client(REGION, access_key_id, access_key_secret) try: job_desc = getDagJobDesc() job_id = client.create_job(job_desc).Id print('job created: %s' % job_id) except ClientError,e: print (e.get_status_code(), e.get_code(), e.get_requestid(), e.get_msg())

1934890530796658 2020-03-28 21:41:29 0 浏览量 回答数 0

回答

Python不支持读取oss数据,因此所有调用python的 Open()、 os.path.exist() 等文件和文件夹操作的函数的代码都无法执行。如Scipy.misc.imread()、numpy.load()等。 通常采用以下两种办法在机器学习平台读取数据。 使用tf.gfile下的函数,适用于简单地读取一张图片,或者一个文本等,成员函数如下。 tf.gfile.Copy(oldpath, newpath, overwrite=False) # 拷贝文件 tf.gfile.DeleteRecursively(dirname) # 递归删除目录下所有文件 tf.gfile.Exists(filename) # 文件是否存在 tf.gfile.FastGFile(name, mode='r') # 无阻塞读取文件 tf.gfile.GFile(name, mode='r') # 读取文件 tf.gfile.Glob(filename) # 列出文件夹下所有文件, 支持pattern tf.gfile.IsDirectory(dirname) # 返回dirname是否为一个目录 tf.gfile.ListDirectory(dirname) # 列出dirname下所有文件 tf.gfile.MakeDirs(dirname) # 在dirname下创建一个文件夹, 如果父目录不存在, 会自动创建父目录. 如果 文件夹已经存在, 且文件夹可写, 会返回成功 tf.gfile.MkDir(dirname) # 在dirname处创建一个文件夹 tf.gfile.Remove(filename) # 删除filename tf.gfile.Rename(oldname, newname, overwrite=False) # 重命名 tf.gfile.Stat(dirname) # 返回目录的统计数据 tf.gfile.Walk(top, inOrder=True) # 返回目录的文件树 具体请参考tf.gfile模块。 使用tf.gfile.Glob、tf.gfile.FastGFile、 tf.WhoFileReader() 、tf.train.shuffer_batch(),适用于批量读取文件(读取文件之前需要获取文件列表,如果是批量读取,还需要创建batch)。 使用机器学习搭建深度学习实验时,通常需要在界面右侧设置读取目录、代码文件等参数。这些参数通过“—XXX”(XXX代表字符串)的形式传入,tf.flags提供了这个功能。 import tensorflow as tf FLAGS = tf.flags.FLAGS tf.flags.DEFINE_string('buckets', 'oss://{OSS Bucket}/', '训练图片所在文件夹') tf.flags.DEFINE_string('batch_size', '15', 'batch大小') files = tf.gfile.Glob(os.path.join(FLAGS.buckets,'*.jpg')) # 如我想列出buckets下所有jpg文件路径 小规模读取文件时建议使用tf.gfile.FastGfile()。 for path in files: file_content = tf.gfile.FastGFile(path, 'rb').read() # 一定记得使用rb读取, 不然很多情况下都会报错 image = tf.image.decode_jpeg(file_content, channels=3) # 本教程以JPG图片为例 大批量读取文件时建议使用tf.WhoFileReader()。 reader = tf.WholeFileReader() # 实例化一个reader fileQueue = tf.train.string_input_producer(files) # 创建一个供reader读取的队列 file_name, file_content = reader.read(fileQueue) # 使reader从队列中读取一个文件 image_content = tf.image.decode_jpeg(file_content, channels=3) # 讲读取结果解码为图片 label = XXX # 这里省略处理label的过程 batch = tf.train.shuffle_batch([label, image_content], batch_size=FLAGS.batch_size, num_threads=4, capacity=1000 + 3 * FLAGS.batch_size, min_after_dequeue=1000) sess = tf.Session() # 创建Session tf.train.start_queue_runners(sess=sess) # 重要!!! 这个函数是启动队列, 不加这句线程会一直阻塞 labels, images = sess.run(batch) # 获取结果 部分代码解释如下: tf.train.string_input_producer:把files转换成一个队列,并且需要 tf.train.start_queue_runners 来启动队列。 tf.train.shuffle_batch参数解释如下: batch_size:批处理大小。即每次运行这个batch,返回的数据个数。 num_threads:运行线程数,一般设置为4。 capacity:随机取文件范围。比如数据集有10000个数据,需要从5000个数据中随机抽取,那么capacity就设置成5000。 min_after_dequeue:维持队列的最小长度,不能大于capacity。

保持可爱mmm 2020-03-27 15:32:59 0 浏览量 回答数 0

回答

本篇主要是介绍如何将渲染软件 Blender 创建成 BatchCompute 的 App,并通过此 App 提交 Blender 渲染作业。 Blender 是目前最流行的一款开源的跨平台全能三维动画制作软件,提供从建模、动画、材质、渲染、到音频处理、视频剪辑等一系列动画短片制作解决方案。 具体介绍可以看这里:https://www.blender.org/features/。 准备工作 (1) 开通服务 开通批量计算服务(BatchCompute): https://help.aliyun.com/document_detail/127644.html 开通对象存储服务(OSS): https://oss.console.aliyun.com 开通MNS服务: https://mns.console.aliyun.com 开通容器服务: https://cr.console.aliyun.com 如果已经开通,请忽略此步骤。 (2) 地域的选择 本篇例子所有阿里云服务都需要使用相同的地域。 本篇例子使用地域: 华南1(深圳) (3) 准备OSS Bucket 请到OSS控制台 创建一个Bucket。 本篇例子假设创建的 bucket 名称为:blender-demo, 地域在华南1(深圳)。 注意: 使用批量计算时,地域需要和 OSS bucket 的地域相同。 注意: 实际操作时,需要将例子中的bucket 名称修改为您自己创建的真实的bucket名称。 制作 Blender Docker 镜像 (1) 创建一个Dockerfile文件 文件名:Dockerfile, 内容如下: FROM ubuntu:latest MAINTAINER your-name 更新源 RUN apt update 清除缓存 RUN apt autoclean 安装 RUN apt install python python-pip curl pulseaudio blender -y 启动时运行这个命令 CMD ["/bin/bash"] (2) build docker build -t ubuntu-blender ./ 等待完成,然后使用下面的命令查看是否有 ubuntu-blender docker images (3) check docker run -t ubuntu-blender blender -v 显示: Blender 2.79 (sub 0) 记住此版本信息,下面要用到。 Docker镜像上传 您需要将 ubuntu-blender 上传到 BatchCompute 支持Registry。 BatchCompute支持2种Registry:阿里云的 CR(Container Registry)和阿里云的OSS。 选择一种即可,推荐第一种: CR。 如何上传,请参考这2篇文档: docker 镜像上传到CR docker 镜像上传到OSS 假设已经上传到CR(地域:华南1-深圳),名称为: registry.cn-shenzhen.aliyuncs.com/batchcompute_test/blender:1.0 创建 App BatchCompute 提交作业,需要配置很多参数。BatchCompute 提供的 App 模板机制,让用户很方便预设参数默认值,提交作业时,只需填写少量参数即可。 下面我们来创建一个 Blender 渲染 App。 (1) 开始创建 App 打开批量计算控制台: https://batchcompute.console.aliyun.com 1 填写基本信息 Docker 镜像名称,填写您已经上传到CR的镜像名称,如: registry.cn-shenzhen.aliyuncs.com/batchcompute_test/blender:1.0 2 运行时参数 只需修改 实例类型为 8核16GB规格,其他的默认即可。 3 (2) 命令行和参数配置 4 命令行填写: python -c "import os;import sys;sys.path.append('/home/scripts/'); from framer import parseFrames; frames=parseFrames('${frames}'); framestr=','.join(map(lambda x:str(x), frames)); s='blender -b /home/input/${scene_file_path} -o /home/output/result/${output_name_format} -F ${format} -f %s' % framestr; print('exec: %s' % s); os.system(s);" ${..} 都是变量,可以作为输入和输出参数。在使用此App提交作业的时候,传入的参数将替换掉这些变量。 参考文档 Blender 2.79 命令行参数 输入参数 注意: 实际操作时,需要将例子中的bucket 名称修改为您自己创建的真实的bucket名称。 名称 默认值 允许覆盖 本地目录绝对路径 备注 scripts_oss_folder oss://blender-demo/scripts/ 否 /home/scripts/ 输入oss目录路径,该路径将挂载到虚拟机的/home/scripts/,应该包含要渲染的 framer.py 文件, 如: oss://bucket/scripts/ input_oss_folder 是 /home/input/ 输入oss目录路径,该路径将挂载到虚拟机的/home/input/,应该包含要渲染的.blend文件, 如: oss://bucket/input/ scene_file_path 是 渲染场景文件的路径,相对于input_oss_folder的目录路径, 如:a.blend 或者 folder_name/a.blend frames 是 支持连续帧:”1-10”, 支持多帧(逗号隔开,无空格):”1,3,5-10” format PNG 是 渲染输出格式,支持: TGA,RAWTGA,JPEG,IRIS,IRIZ,AVIRAW,AVIJPEG,PNG,BMP output_name_format ####.png 是 输出文件名,#会被替代为帧序号,不足位补零。举例: test_###.png 变成 test_001.png,可以在前面加目录名: test/test_###.png 输出参数 名称 默认值 允许覆盖 本地目录绝对路径 备注 output_oss_folder 是 /home/output/ 输出oss目录路径, 如: oss://bucket/output/。 环境变量 环境变量可以不用配置, 直接提交即可。 提交渲染作业 在App列表中可以看到已经创建好的 ubuntu-blender, 点击”提交作业”。 5 (1) 准备工作 在提交作业前,还有一些准备工作。 手动上传分帧器 分帧器python代码(见附录),上传到您的OSS目录下,比如: oss://blender-demo/scripts/framer.py 手动上传blender场景文件 Blender 官网提供了好多 demo 文件: https://www.blender.org/download/demo-files/ 本例子需要下载 2.79 版本(注意:要和镜像中安装的Blender版本相同。不同版本的可能渲染不出来) 6 素材下载后,解压得到目录: splash279/ 将整个目录上传到 oss://blender-demo/input/ 下面,即:oss://blender-demo/input/splash279/。 (2) 开始提交作业 7 实例类型要选大一点的,比如: 8核16GB。 实例数量本例子填 2 个。 (3) 参数配置 注意: 实际操作时,需要将例子中的 bucket 名称修改为您自己创建的真实的bucket名称。 8 输入: 参数 值 说明 input_oss_folder oss://blender-demo/input/ 场景文件所在OSS目录 scene_file_path splash279/splash279.blend 场景文件名 frames 1-4 渲染1到4帧 format PNG 渲染输出格式,默认即可 output_name_format ####.png 渲染输出文件名,默认即可 scripts_oss_folder 设置了默认值,且不允许覆盖,可以不用填。 输出: 参数 值 说明 input_oss_folder oss://blender-demo/output/ 输出OSS目录, 渲染结果图片将保存到此目录的 result/ 子目录下 Loggin(日志目录配置): 参数 值 说明 StdoutPath oss://blender-demo/log/ stdout日志输出到此 StderrPath oss://blender-demo/log/ stderr日志输出到此 填好后点击提交即可。 查看作业状态和结果 (1) 查看作业状态 9 (2) 查看结果 oss://blender-demo/output/result/ 10 (3) 渲染时长和实例规格参考 实例规格 节点数 渲染帧数 时长 ecs.sn1ne.2xlarge(8核16GB) 2 1-4 9-12分钟 ecs.sn1ne.4xlarge (16核/32GB) 2 1-4 4-6分钟 6. 附录 分帧器代码(python): framer.py: #!/usr/bin/python -- coding: UTF-8 -- import os import math import sys import re NOTHING_TO_DO = 'Nothing to do, exit' def _calcRange(a,b, id, step): start = min(id * step + a, b) end = min((id+1) * step + a-1, b) return (start, end) def _parseContinuedFrames(render_frames, total_nodes, id=None, return_type='list'): ''' 解析连续帧, 如: 1-10 ''' [a,b]=render_frames.split('-') a=int(a) b=int(b) #print(a,b) step = int(math.ceil((b-a+1)*1.0/total_nodes)) #print('step:', step) mod = (b-a+1) % total_nodes #print('mod:', mod) if mod==0 or id < mod: (start, end) = _calcRange(a,b, id, step) #print('--->',start, end) return (start, end) if return_type!='list' else range(start, end+1) else: a1 = step * mod + a #print('less', a1, b, id) (start, end) = _calcRange(a1 ,b, id-mod, step-1) #print('--->',start, end) return (start, end) if return_type!='list' else range(start, end+1) def _parseIntermittentFrames(render_frames, total_nodes, id=None): ''' 解析不连续帧, 如: 1,3,8-10,21 ''' a1=render_frames.split(',') a2=[] for n in a1: a=n.split('-') a2.append(range(int(a[0]),int(a[1])+1) if len(a)==2 else [int(a[0])]) a3=[] for n in a2: a3=a3+n #print('a3',a3) step = int(math.ceil(len(a3)*1.0/total_nodes)) #print('step',step) mod = len(a3) % total_nodes #print('mod:', mod) if mod==0 or id < mod: (start, end) = _calcRange(0, len(a3)-1, id, step) #print(start, end) a4= a3[start: end+1] #print('--->', a4) return a4 else: #print('less', step * mod , len(a3)-1, id) (start, end) = _calcRange( step * mod ,len(a3)-1, id-mod, step-1) if start > len(a3)-1: print(NOTHING_TO_DO) sys.exit(0) #print(start, end) a4= a3[start: end+1] #print('--->', a4) return a4 def parseFrames(render_frames, return_type='list', id=None, total_nodes=None): ''' @param render_frames {string}: 需要渲染的总帧数列表范围,可以用"-"表示范围,不连续的帧可以使用","隔开, 如: 1,3,5-10 @param return_type {string}: 取值范围[list,range]。 list样例: [1,2,3], range样例: (1,3)。 注意: render_frames包含","时有效,强制为list。 @param id, 节点ID,从0开始。 正式环境不要填写,将从环境变量 BATCH_COMPUTE_DAG_INSTANCE_ID 中取得。 @param total_nodes, 总共的节点个数。正式环境不要填写,将从环境变量 BATCH_COMPUTE_DAG_INSTANCE_COUNT 中取得。 ''' if id==None: id=os.environ['BATCH_COMPUTE_DAG_INSTANCE_ID'] if type(id)==str: id = int(id) if total_nodes==None: total_nodes = os.environ['BATCH_COMPUTE_DAG_INSTANCE_COUNT'] if type(total_nodes)==str: total_nodes = int(total_nodes) if re.match(r'^(\d+)-(\d+)$',render_frames): # 1-2 # continued frames return _parseContinuedFrames(render_frames, total_nodes, id, return_type) else: # intermittent frames return _parseIntermittentFrames(render_frames, total_nodes, id)

1934890530796658 2020-03-28 20:42:58 0 浏览量 回答数 0

回答

Pandas是Python的一个大数据处理模块。Pandas使用一个二维的数据结构DataFrame来表示表格式的数据,相比较于Numpy,Pandas可以存储混合的数据结构,同时使用NaN来表示缺失的数据,而不用像Numpy一样要手工处理缺失的数据,并且Pandas使用轴标签来表示行和列。 DataFrame类: DataFrame有四个重要的属性: index:行索引。 columns:列索引。 values:值的二维数组。 name:名字。 构建方法,DataFrame(sequence),通过序列构建,序列中的每个元素是一个字典。 frame=DateFrame构建完之后,假设frame中有’name’,’age’,’addr’三个属性,可以使用fame[‘name’]查看属性列内容,也可以fame.name这样直接查看。 frame按照’属性提取出来的每个列是一个Series类。 DataFrame类可以使用布尔型索引。 groupby(str|array…)函数:可以使用frame中对应属性的str或者和frame行数相同的array作为参数还可以使用一个会返回和frame长度相同list的函数作为参数,如果使用函数做分组参数,这个用做分组的函数传入的参数将会是fame的index,参数个数任意。使用了groupby函数之后配合,size()函数就可以对groupby结果进行统计。 groupby后可以使用: size():就是count sum():分组求和 apply(func,axis=0):在分组上单独使用函数func返回frame,不groupby用在DataFrame会默认将func用在每个列上,如果axis=1表示将func用在行上。 reindex(index,column,method):用来重新命名索引,和插值。 size():会返回一个frame,这个frame是groupby后的结果。 sum(n).argsort():如果frame中的值是数字,可以使用sum函数计算frame中摸个属性,各个因子分别求和,并返回一个Series,这个Series可以做为frame.take的参数,拿到frame中对应的行。 pivot_table(操作str1,index=str2,columns=str3,aggfunc=str4)透视图函数: str1:是给函数str4作为参数的部分。 str2:是返回frame的行名。 str3:是返回frame的列名。 str4:是集合函数名,有’mean’,’sum’这些,按照str2,str3分组。 使用透视图函数之后,可以使用.sum()这类型函数,使用后会按照index和columns的分组求和。 order_index(by,ascending): 返回一个根据by排序,asceding=True表示升序,False表示降序的frame concat(list):将一个列表的frame行数加起来。 ix[index]:就是行索引,DataFrame的普通下标是列索引。 take(index):作用和ix差不多,都是查询行,但是ix传入行号,take传入行索引。 unstack():将行信息变成列信息。 apply(func,axis=0)和applymap(func):apply用在DataFrame会默认将func用在每个列上,如果axis=1表示将func用在行上。applymap表示func用在每个元素上。 combine_first(frame2):combine_first会把frame中的空值用frame1中对应位置的数据进行填充。Series方法也有相同的方法。 stack()函数,可以将DataFrame的列转化成行,原来的列索引成为行的层次索引。(stack和unstack方法是两个互逆的方法,可以用来进行Series和DataFrame之间的转换) duplicated():返回一个布尔型Series,表示各行是否重复。 drop_duplicates():返回一个移除了重复行后的DataFrame pct_change():Series也有这个函数,这个函数用来计算同colnums两个相邻的数字之间的变化率。 corr():计算相关系数矩阵。 cov():计算协方差系数矩阵。 corrwith(Series|list,axis=0):axis=0时计算frame的每列和参数的相关系数。 数据框操作 df.head(1) 读取头几条数据 df.tail(1) 读取后几条数据 df[‘date’] 获取数据框的date列 df.head(1)[‘date’] 获取第一行的date列 df.head(1)‘date’ 获取第一行的date列的元素值 sum(df[‘ability’]) 计算整个列的和 df[df[‘date’] == ‘20161111’] 获取符合这个条件的行 df[df[‘date’] == ‘20161111’].index[0] 获取符合这个条件的行的行索引的值 df.iloc[1] 获取第二行 df.iloc1 获取第二行的test2值 10 mins to pandas df.index 获取行的索引 df.index[0] 获取第一个行索引 df.index[-1] 获取最后一个行索引,只是获取索引值 df.columns 获取列标签 df[0:2] 获取第1到第2行,从0开始,不包含末端 df.loc[1] 获取第二行 df.loc[:,’test1’] 获取test1的那一列,这个冒号的意思是所有行,逗号表示行与列的区分 df.loc[:,[‘test1’,’test2’]] 获取test1列和test2列的数据 df.loc[1,[‘test1’,’test2’]] 获取第二行的test1和test2列的数据 df.at[1,’test1’] 表示取第二行,test1列的数据,和上面的方法类似 df.iloc[0] 获取第一行 df.iloc[0:2,0:2] 获取前两行前两列的数据 df.iloc[[1,2,4],[0,2]] 获取第1,2,4行中的0,2列的数据 (df[2] > 1).any() 对于Series应用any()方法来判断是否有符合条件的

世事皆空 2019-12-02 01:07:19 0 浏览量 回答数 0

问题

【精品问答】大数据计算技术1000问

问问小秘 2019-12-01 21:57:13 3431 浏览量 回答数 1

回答

准备工作 1.1. 选择区域 所有阿里云服务都需要使用相同的地域。 1.2. 开通服务 开通批量计算服务(BatchCompute); 开通对象存储服务(OSS)。 1.3. 制作镜像 制作镜像具体步骤请参考集群镜像, 请严格按文档的步骤创建镜像。镜像制作完成后,通过以下方式可以获取到对应的镜像信息。 image 1.4. 上传素材 可以下载 3ds Max 官方提供的免费素材包进行测试。 通过 OSSBrowser 工具将渲染素材到指定的 OSS bucket 中,如下图: upload 1.5. 安装批量计算 SDK 在需要提交作业的机器上,安装批量计算 SDK 库;已经安装请忽略。Linux 安装执行如下命令;Windows 平台请参考文档。 pip install batchcompute 2. 编写work脚本 work.py #!/usr/bin/env python -- coding: UTF-8 -- import os import math import sys import re import argparse NOTHING_TO_DO = 'Nothing to do, exit' def _calcRange(a,b, id, step): start = min(id * step + a, b) end = min((id+1) * step + a-1, b) return (start, end) def _parseContinuedFrames(render_frames, total_nodes, id=None, return_type='list'): ''' 解析连续帧, 如: 1-10 ''' [a,b]=render_frames.split('-') a=int(a) b=int(b) #print(a,b) step = int(math.ceil((b-a+1)*1.0/total_nodes)) #print('step:', step) mod = (b-a+1) % total_nodes #print('mod:', mod) if mod==0 or id < mod: (start, end) = _calcRange(a,b, id, step) #print('--->',start, end) return (start, end) if return_type!='list' else range(start, end+1) else: a1 = step * mod + a #print('less', a1, b, id) (start, end) = _calcRange(a1 ,b, id-mod, step-1) #print('--->',start, end) return (start, end) if return_type!='list' else range(start, end+1) def _parseIntermittentFrames(render_frames, total_nodes, id=None): ''' 解析不连续帧, 如: 1,3,8-10,21 ''' a1=render_frames.split(',') a2=[] for n in a1: a=n.split('-') a2.append(range(int(a[0]),int(a[1])+1) if len(a)==2 else [int(a[0])]) a3=[] for n in a2: a3=a3+n #print('a3',a3) step = int(math.ceil(len(a3)*1.0/total_nodes)) #print('step',step) mod = len(a3) % total_nodes #print('mod:', mod) if mod==0 or id < mod: (start, end) = _calcRange(0, len(a3)-1, id, step) #print(start, end) a4= a3[start: end+1] #print('--->', a4) return a4 else: #print('less', step * mod , len(a3)-1, id) (start, end) = _calcRange( step * mod ,len(a3)-1, id-mod, step-1) if start > len(a3)-1: print(NOTHING_TO_DO) sys.exit(0) #print(start, end) a4= a3[start: end+1] #print('--->', a4) return a4 def parseFrames(render_frames, return_type='list', id=None, total_nodes=None): ''' @param render_frames {string}: 需要渲染的总帧数列表范围,可以用"-"表示范围,不连续的帧可以使用","隔开, 如: 1,3,5-10 @param return_type {string}: 取值范围[list,range]。 list样例: [1,2,3], range样例: (1,3)。 注意: render_frames包含","时有效,强制为list。 @param id, 节点ID,从0开始。 正式环境不要填写,将从环境变量 BATCH_COMPUTE_DAG_INSTANCE_ID 中取得。 @param total_nodes, 总共的节点个数。正式环境不要填写,将从环境变量 BATCH_COMPUTE_DAG_INSTANCE_COUNT 中取得。 ''' if id==None: id=os.environ['BATCH_COMPUTE_DAG_INSTANCE_ID'] if type(id)==str: id = int(id) if total_nodes==None: total_nodes = os.environ['BATCH_COMPUTE_DAG_INSTANCE_COUNT'] if type(total_nodes)==str: total_nodes = int(total_nodes) if re.match(r'^(\d+)-(\d+)$',render_frames): # 1-2 # continued frames return _parseContinuedFrames(render_frames, total_nodes, id, return_type) else: # intermittent frames return _parseIntermittentFrames(render_frames, total_nodes, id) if name == "main": parser = argparse.ArgumentParser( formatter_class = argparse.ArgumentDefaultsHelpFormatter, description = 'python scripyt for 3dmax dag job', usage='render3Dmax.py [ ]', ) parser.add_argument('-s', '--scene_file', action='store', type=str, required=True, help = 'the name of the file with .max subffix .') parser.add_argument('-i', '--input', action='store', type=str, required=True, help = 'the oss dir of the scene_file, eg: xxx.max.') parser.add_argument('-o', '--output', action='store', type=str, required=True, help = 'the oss of dir the result file to upload .') parser.add_argument('-f', '--frames', action='store', type=str, required=True, help = 'the frames to be renderd, eg: "1-10".') parser.add_argument('-t', '--retType', action='store', type=str, default="test.jpg", help = 'the tye of the render result,eg. xxx.jpg/xxx.png.') args = parser.parse_args() frames=parseFrames(args.frames) framestr='-'.join(map(lambda x:str(x), frames)) s = "cd "C:\Program Files\Autodesk\3ds Max 2018\" && " s +='3dsmaxcmd.exe -o="%s%s" -frames=%s "%s\%s"' % (args.output, args.retType, framestr, args.input, args.scene_file) print("exec: %s" % s) rc = os.system(s) sys.exit(rc>>8) 注意: work.py 只需要被上传到 OSS bucket中不需要手动执行;各项参数通过作业提交脚本进行传递; work.py 的112 行需要根据镜像制作过程中 3ds MAX 的位置做对应替换; work.py 的 scene_file 参数表示场景文件;如 Lighting-CB_Arnold_SSurface.max; work.py 的 input 参数表示素材映射到 VM 中的位置,如: D; work.py 的 output 参数表示渲染结果输出的本地路径;如 C:\tmp\; work.py 的 frames 参数表示渲染的帧数,如: 1; work.py 的 retType 参数表示素材映射到 VM 中的位置,如: test.jpg;渲染结束后如果是多帧,则每帧的名称为test000.jpg,test001.jpg等。 work 编写作业提交脚本 test.py #!/usr/bin/env python -- coding: utf-8 -- from batchcompute import Client, ClientError from batchcompute.resources import ( ClusterDescription, GroupDescription, Configs, Networks, VPC, JobDescription, TaskDescription, DAG,Mounts, AutoCluster,Disks,Notification, ) import time import argparse from batchcompute import CN_SHANGHAI as REGION #需要根据 region 做适配 access_key_id = "xxxx" # your access key id access_key_secret = "xxxx" # your access key secret instance_type = "ecs.g5.4xlarge" # instance type #需要根据 业务需要 做适配 image_id = "m-xxx" workossPath = "oss://xxxxx/work/work.py" client = Client(REGION, access_key_id, access_key_secret) def getAutoClusterDesc(InstanceCount): auto_desc = AutoCluster() auto_desc.ECSImageId = image_id #任务失败保留环境,程序调试阶段设置。环境保留费用会继续产生请注意及时手动清除环境任务失败保留环境, # 程序调试阶段设置。环境保留费用会继续产生请注意及时手动清除环境 auto_desc.ReserveOnFail = False # 实例规格 auto_desc.InstanceType = instance_type #case3 按量 auto_desc.ResourceType = "OnDemand" #Configs configs = Configs() #Configs.Networks networks = Networks() vpc = VPC() # CidrBlock和VpcId 都传入,必须保证VpcId的CidrBlock 和传入的CidrBlock保持一致 vpc.CidrBlock = '172.26.0.0/16' # vpc.VpcId = "vpc-8vbfxdyhx9p2flummuwmq" networks.VPC = vpc configs.Networks = networks # 设置系统盘type(cloud_efficiency/cloud_ssd)以及size(单位GB) configs.add_system_disk(size=40, type_='cloud_efficiency') #设置数据盘type(必须和系统盘type保持一致) size(单位GB) 挂载点 # case1 linux环境 # configs.add_data_disk(size=40, type_='cloud_efficiency', mount_point='/path/to/mount/') # 设置节点个数 configs.InstanceCount = InstanceCount auto_desc.Configs = configs return auto_desc def getTaskDesc(inputOssPath, outputossPath, scene_file, frames, retType, clusterId, InstanceCount): taskDesc = TaskDescription() timestamp = time.strftime("%Y_%m_%d_%H_%M_%S", time.localtime()) inputLocalPath = "D:" outputLocalPath = "C:\\tmp\\" + timestamp + "\\" outputossBase = outputossPath + timestamp + "/" stdoutOssPath = outputossBase + "stdout/" #your stdout oss path stderrOssPath = outputossBase + "stderr/" #your stderr oss path outputossret = outputossBase + "ret/" taskDesc.InputMapping = {inputOssPath: inputLocalPath} taskDesc.OutputMapping = {outputLocalPath: outputossret} taskDesc.Parameters.InputMappingConfig.Lock = True # 设置程序的标准输出地址,程序中的print打印会实时上传到指定的oss地址 taskDesc.Parameters.StdoutRedirectPath = stdoutOssPath # 设置程序的标准错误输出地址,程序抛出的异常错误会实时上传到指定的oss地址 taskDesc.Parameters.StderrRedirectPath = stderrOssPath #触发程序运行的命令行 # PackagePath存放commandLine中的可执行文件或者二进制包 taskDesc.Parameters.Command.PackagePath = workossPath taskDesc.Parameters.Command.CommandLine = "python work.py -i %s -o %s -s %s -f %s -t %s" % (inputLocalPath, outputLocalPath, scene_file, frames, retType) # 设置任务的超时时间 taskDesc.Timeout = 86400 # 设置任务所需实例个数 taskDesc.InstanceCount = InstanceCount # 设置任务失败后重试次数 taskDesc.MaxRetryCount = 3 if clusterId: # 采用固定集群提交作业 taskDesc.ClusterId = clusterId else: #采用auto集群提交作业 taskDesc.AutoCluster = getAutoClusterDesc(InstanceCount) return taskDesc def getDagJobDesc(inputOssPath, outputossPath, scene_file, frames, retType, clusterId = None, instanceNum = 1): job_desc = JobDescription() dag_desc = DAG() job_desc.Name = "testBatch" job_desc.Description = "test 3dMAX job" job_desc.Priority = 1 # 任务失败 job_desc.JobFailOnInstanceFail = False # 作业运行成功后户自动会被立即释放掉 job_desc.AutoRelease = False job_desc.Type = "DAG" render = getTaskDesc(inputOssPath, outputossPath, scene_file, frames, retType, clusterId, instanceNum) # 添加任务 dag_desc.add_task('render', render) job_desc.DAG = dag_desc return job_desc if name == "main": parser = argparse.ArgumentParser( formatter_class = argparse.ArgumentDefaultsHelpFormatter, description = 'python scripyt for 3dmax dag job', usage='render3Dmax.py [ ]', ) parser.add_argument('-n','--instanceNum', action='store',type = int, default = 1,help = 'the parell instance num .') parser.add_argument('-s', '--scene_file', action='store', type=str, required=True, help = 'the name of the file with .max subffix .') parser.add_argument('-i', '--inputoss', action='store', type=str, required=True, help = 'the oss dir of the scene_file, eg: xxx.max.') parser.add_argument('-o', '--outputoss', action='store', type=str, required=True, help = 'the oss of dir the result file to upload .') parser.add_argument('-f', '--frames', action='store', type=str, required=True, help = 'the frames to be renderd, eg: "1-10".') parser.add_argument('-t', '--retType', action='store', type=str, default = "test.jpg", help = 'the tye of the render result,eg. xxx.jpg/xxx.png.') parser.add_argument('-c', '--clusterId', action='store', type=str, default=None, help = 'the clusterId to be render .') args = parser.parse_args() try: job_desc = getDagJobDesc(args.inputoss, args.outputoss, args.scene_file, args.frames,args.retType, args.clusterId, args.instanceNum) # print job_desc job_id = client.create_job(job_desc).Id print('job created: %s' % job_id) except ClientError,e: print (e.get_status_code(), e.get_code(), e.get_requestid(), e.get_msg()) 注意: 代码中 12~20 行 需要根据做适配,如 AK 信息需要填写账号对应的AK信息;镜像Id 就是1.3 中制作的镜像 Id;workosspath 是步骤 2 work.py 在oss上的位置; 参数 instanceNum 表示 当前渲染作业需要几个节点参与,默认是1个节点;若是设置为多个节点,work.py 会自动做均分; 参数 scene_file 表示需要渲染的场景文件,传给 work.py; 参数 inputoss 表示 素材上传到 OSS 上的位置,也即1.4 中的 OSS 位置; 参数 outputoss 表示最终结果上传到 Oss 上的位置; 参数 frames 表示需要渲染的场景文件的帧数,传给 work.py;3ds MAX 不支持隔帧渲染,只能是连续帧,如1-10; 参数 retType 表示需要渲染渲染结果名称,传给 work.py,默认是 test.jpg,则最终得到test000.jpg 参数 clusterId 表示采用固定集群做渲染时,固定集群的Id。 4. 提交作业 根据以上示例文档,执行以下命令: python test.py -s Lighting-CB_Arnold_SSurface.max -i oss://bcs-test-sh/3dmaxdemo/Scenes/Lighting/ -o oss://bcs-test-sh/test/ -f 1-1 -t 123.jpg 示例运行结果: restulr picture

1934890530796658 2020-03-28 20:43:30 0 浏览量 回答数 0

问题

详解递归 6月18日【今日算法】

游客ih62co2qqq5ww 2020-06-20 12:04:38 2 浏览量 回答数 0

回答

Aliyun Function Compute API Specification Overview Version information Version : 0.1 URI scheme Host : $account-id.$region.fc.aliyuncs.com BasePath : /version, version 是指函数计算提供的 api 的版本,即 api-version; 目前的 api-version 为 2016-08-15 。 Schemes : HTTP, HTTPS Tags Service : Service相关的操作 Function : Function相关的操作 Trigger : Trigger相关的操作 Version : Version相关的操作 Alias :Alias相关的操作 CustomDomain: CustomDomain相关的操作 ProvisionConfig: ProvisionConfig相关的操作 Consumes application/json Produces application/json Resources Service Service相关的操作 CreateService ListServices GetService UpdateService DeleteService Function Function相关的操作 CreateFunction ListFunctions GetFunction UpdateFunction DeleteFunction GetFunctionCode InvokeFunction Trigger Trigger相关的操作 CreateTrigger ListTriggers GetTrigger UpdateTrigger DeleteTrigger Version Version相关的操作 PublishVersion ListVersions DeleteVersion Alias Alias相关的操作 CreateAlias ListAliases GetAlias UpdateAlias DeleteAlias CustomDomain CustomDomain 相关的操作 CreateCustomDomain ListCustomDomain GetCustomDomain UpdateCustomDomain DeleteCustomDomain ProvisionConfig ProvisionConfig 相关的操作 PutProvisionConfig GetProvisionConfig ListProvisionConfigs Tag Tag 相关的操作 TagResource UntagResource GetResourceTags Operations CreateFunction POST /services/{serviceName}/functions Description 创建function Parameters Type Name Description Schema Header Host required 访问域名:$account-id.$region.fc.aliyuncs.com string Path serviceName required service名称 string Body body required function对象描述 Function Responses HTTP Code Description Schema 200 创建成功 Headers : ETag (string) : function etag,用于更改function。以确保实际更改的function和期望更改的function是一致的. FunctionResponse 400 请求无效,错误码:InvalidArgument Error 403 拒绝请求,错误码:AccessDenied,InvalidAccessKeyId,SignatureNotMatch,RequestTimeTooSkewed Error 404 service不存在,错误码:ServiceNotFound Error 409 function已存在,错误码:FunctionAlreadyExists Error 500 服务内部错误,错误码:InternalServerError Error CreateService POST /services Description 创建service Parameters Type Name Description Schema Header Host required 访问域名:$account-id.$region.fc.aliyuncs.com string Body body required service对象描述 Service Responses HTTP Code Description Schema 200 创建成功 Headers : ETag (string) : service etag,用于更改service。以确保实际更改的service和期望更改的service是一致的. ServiceResponse 400 请求无效,错误码:InvalidArgument Error 403 拒绝请求,错误码:AccessDenied,InvalidAccessKeyId,SignatureNotMatch,RequestTimeTooSkewed Error 409 service已存在,错误码:ServiceAlreadyExists Error 500 服务内部错误,错误码:InternalServerError Error CreateTrigger POST /services/{serviceName}/functions/{functionName}/triggers Description 创建trigger Parameters Type Name Description Schema Header Host required 访问域名:$account-id.$region.fc.aliyuncs.com string Path functionName required function名称 string Path serviceName required service名称 string Body body required trigger对象 Trigger Responses HTTP Code Description Schema 200 创建成功 Headers : ETag (string) : trigger etag,用于更改trigger。以确保实际更改的trigger和期望更改的trigger是一致的. TriggerResponse 400 请求无效,错误码:InvalidArgument Error 403 拒绝请求,错误码:AccessDenied,InvalidAccessKeyId,SignatureNotMatch,RequestTimeTooSkewed Error 404 service或function不存在,错误码:ServiceNotFound,FunctionNotFound Error 409 Trigger already exists. Error code is TriggerAlreadyExists. Error 500 服务内部错误,错误码:InternalServerError Error PublishVersion POST /services/{serviceName}/versions Description 发布version Parameters Type Name Description Schema Header Host required 访问域名:$account-id.$region.fc.aliyuncs.com string Header If-Match optional 用于确保实际更改的资源和期望更改的资源是一致的,该值来自Create,Get和Update Service API的响应 string Path serviceName required service名称 string Body body optional version描述 string Responses HTTP Code Description Schema 200 发布成功 Headers : ETag (string) : version etag,用以确保实际发布的service和期望发布的version是一致的. VersionResponse 400 请求无效,错误码:InvalidArgument Error 403 拒绝请求,错误码:AccessDenied,InvalidAccessKeyId,SignatureNotMatch,RequestTimeTooSkewed Error 404 service不存在,错误码:ServiceNotFound Error 409 service发布失败,错误码:VersionPublishError, ConcurrentUpdateError Error 500 服务内部错误,错误码:InternalServerError Error CreateAlias POST /services/{serviceName}/aliases Description 创建alias Parameters Type Name Description Schema Header Host required 访问域名:$account-id.$region.fc.aliyuncs.com string Path serviceName required service名称 string Body body required alias名称 string Body body required versionId string Body body optional alias描述 string Body body optional 灰度发布的版本,以及对应的流量权重 map Responses HTTP Code Description Schema 200 创建成功 Headers : ETag (string) : alias etag,用以确保实际更改的alias和期望更改的alias是一致的. ||400|请求无效,错误码:InvalidArgument|Error||403|拒绝请求,错误码:AccessDenied,InvalidAccessKeyId,SignatureNotMatch,RequestTimeTooSkewed|Error||404|service或者version不存在,错误码:ServiceNotFound,VersionNotFound|Error||409|alias已经存在,错误码:AliasAlreadyExists.|Error||500|服务内部错误,错误码:InternalServerError|Error| DeleteFunction DELETE /services/{serviceName}/functions/{functionName} Description 删除function Parameters Type Name Description Schema Header Host required 访问域名:$account-id.$region.fc.aliyuncs.com string Header If-Match optional 用于确保实际更改的资源和期望更改的资源是一致的,该值来自Create,Get和Update API的响应 string Path functionName required function名称 string Path serviceName required service名称 string Responses HTTP Code Description Schema 204 删除成功 No Content 400 请求无效,错误码:InvalidArgument Error 403 拒绝请求,错误码:AccessDenied,InvalidAccessKeyId,SignatureNotMatch,RequestTimeTooSkewed Error 404 service或function不存在,错误码:ServiceNotFound,FunctionNotFound Error 409 function非空,包含至少一个trigger,错误码:FunctionNotEmpty; 多个线程同时删除,错误码:ConcurrentUpdateError Error 500 服务内部错误,错误码:InternalServerError Error DeleteService DELETE /services/{serviceName} Description 删除service Parameters Type Name Description Schema Header Host required 访问域名:$account-id.$region.fc.aliyuncs.com string Header If-Match optional 用于确保实际更改的资源和期望更改的资源是一致的,该值来自Create,Get和Update API的响应 string Path serviceName required service名称 string Responses HTTP Code Description Schema 204 删除成功 No Content 400 请求无效,错误码:InvalidArgument Error 403 拒绝请求,错误码:AccessDenied,InvalidAccessKeyId,SignatureNotMatch,RequestTimeTooSkewed Error 404 service不存在,错误码:ServiceNotFound Error 409 service非空,错误码:ServiceNotEmpty; 多个线程同时删除,错误码:ConcurrentUpdateError Error 500 服务内部错误,错误码:InternalServerError Error DeleteTrigger DELETE /services/{serviceName}/functions/{functionName}/triggers/{triggerName} Description 删除trigger Parameters Type Name Description Schema Header Host required 访问域名:$account-id.$region.fc.aliyuncs.com string Header If-Match optional 用于确保实际更改的资源和期望更改的资源是一致的,该值来自Create,Get和Update API的响应 string Path functionName required function名称 string Path serviceName required service名称 string Path triggerName required trigger名称 string Responses HTTP Code Description Schema 204 删除成功 No Content 400 请求无效,错误码:InvalidArgument Error 403 拒绝请求,错误码:AccessDenied,InvalidAccessKeyId,SignatureNotMatch,RequestTimeTooSkewed Error 404 service,function,trigger不存在,错误码:ServiceNotFound,FunctionNotFound,TriggerNotFound Error 409 多个线程同时删除,错误码:ConcurrentUpdateError Error 500 服务内部错误,错误码:InternalServerError Error DeleteVersion DELETE /services/{serviceName}/versions/{versionId} Description 删除version Parameters Type Name Description Schema Header Host required 访问域名:$account-id.$region.fc.aliyuncs.com string Path serviceName required service名称 string Path versionId required versionId string Responses HTTP Code Description Schema 204 删除成功 No Content 400 请求无效,错误码:InvalidArgument Error 403 拒绝请求,错误码:AccessDenied,InvalidAccessKeyId,SignatureNotMatch,RequestTimeTooSkewed Error 404 version不存在,错误码:VersionNotFound Error 409 多个线程同时删除,错误码:ConcurrentUpdateError Error 500 服务内部错误,错误码:InternalServerError Error DeleteAlias DELETE /services/{serviceName}/aliases/{aliasName} Description 删除alias Parameters Type Name Description Schema Header Host required 访问域名:$account-id.$region.fc.aliyuncs.com string Header If-Match optional 用于确保实际更改的资源和期望更改的资源是一致的,该值来自Create,Get和Update Alias API的响应 string Path serviceName required service名称 string Path aliasName required alias名称 string Responses HTTP Code Description Schema 204 删除成功 No Content 400 请求无效,错误码:InvalidArgument Error 403 拒绝请求,错误码:AccessDenied,InvalidAccessKeyId,SignatureNotMatch,RequestTimeTooSkewed Error 404 alias不存在,错误码:AliasNotFound Error 409 多个线程同时删除,错误码:ConcurrentUpdateError Error 500 服务内部错误,错误码:InternalServerError Error GetFunction GET /services/{serviceName}/functions/{functionName} GET /services/{serviceName}.{qualifier}/functions/{functionName} Description 获取function信息 Parameters Type Name Description Schema Header Host required 访问域名:$account-id.$region.fc.aliyuncs.com string Path functionName required function名称 string Path serviceName required service名称 string Path qualifier optional service版本, 可以是versionId或者aliasName string Responses HTTP Code Description Schema 200 请求成功 Headers : ETag (string) : function etag,用于更改function。以确保实际更改的function和期望更改的function是一致的. FunctionResponse 400 请求无效,错误码:InvalidArgument Error 403 拒绝请求,错误码:AccessDenied,InvalidAccessKeyId,SignatureNotMatch,RequestTimeTooSkewed Error 404 service,function,alias或者version不存在,错误码:ServiceNotFound,FunctionNotFound,VersionNotFound,AliasNotFound Error 500 服务内部错误,错误码:InternalServerError Error GetFunctionCode GET /services/{serviceName}/functions/{functionName}/code GET /services/{serviceName}.{qualifier}/functions/{functionName}/code Description 获取Function代码 Parameters Type Name Description Schema Header Host required 访问域名:$account-id.$region.fc.aliyuncs.com string Path functionName required function名称 string Path serviceName required service名称 string Path qualifier optional service版本, 可以是versionId或者aliasName string Responses HTTP Code Description Schema 200 请求成功 FunctionCodeResponse 403 拒绝请求,错误码:AccessDenied,InvalidAccessKeyId,SignatureNotMatch,RequestTimeTooSkewed Error 404 service,function,alias或者version不存在,错误码:ServiceNotFound,FunctionNotFound,VersionNotFound,AliasNotFound Error 500 服务内部错误,错误码:InternalServerError Error GetService GET /services/{serviceName} GET /services/{serviceName}.{qualifier} Description 获取service信息 Parameters Type Name Description Schema Header Host required 访问域名:$account-id.$region.fc.aliyuncs.com string Path serviceName required service名称 string Path qualifier optional service版本, 可以是versionId或者aliasName string Responses HTTP Code Description Schema 200 请求成功 Headers : ETag (string) : service etag,用于更改service。以确保实际更改的service和期望更改的service是一致的. ServiceResponse 400 请求无效,错误码:InvalidArgument Error 403 拒绝请求,错误码:AccessDenied,InvalidAccessKeyId,SignatureNotMatch,RequestTimeTooSkewed Error 404 service,alias或者version不存在,错误码:ServiceNotFound,VersionNotFound,AliasNotFound Error 500 服务内部错误,错误码:InternalServerError Error GetAlias GET /services/{serviceName}/aliases/{aliasName} Description 获取alias信息 Parameters Type Name Description Schema Header Host required 访问域名:$account-id.$region.fc.aliyuncs.com string Header If-Match optional 用于确保实际更改的资源和期望更改的资源是一致的,该值来自Create,Get和Update Alias API的响应 string Path serviceName required service名称 string Path aliasName required alias名称 string Responses HTTP Code Description Schema 200 请求成功 Headers : ETag (string) : alias etag,用于更改alias。以确保实际更改的alias和期望更改的alias是一致的. AliasResponse 400 请求无效,错误码:InvalidArgument Error 403 拒绝请求,错误码:AccessDenied,InvalidAccessKeyId,SignatureNotMatch,RequestTimeTooSkewed Error 404 alias不存在,错误码:AliasNotFound Error 409 多个线程同时更新,错误码:ConcurrentUpdateError Error 500 服务内部错误,错误码:InternalServerError Error GetTrigger GET /services/{serviceName}/functions/{functionName}/triggers/{triggerName} Description 获取trigger信息 Parameters Type Name Description Schema Header Host required 访问域名:$account-id.$region.fc.aliyuncs.com string Path functionName required function名称 string Path serviceName required service名称 string Path triggerName required trigger名称 string Responses HTTP Code Description Schema 200 请求成功 Headers : ETag (string) : trigger etag,用于更改trigger。以确保实际更改的trigger和期望更改的trigger是一致的. TriggerResponse 400 请求无效,错误码:InvalidArgument Error 403 拒绝请求,错误码:AccessDenied,InvalidAccessKeyId,SignatureNotMatch,RequestTimeTooSkewed Error 404 service,function,trigger不存在,错误码:ServiceNotFound,FunctionNotFound,TriggerNotFound Error 500 服务内部错误,错误码:InternalServerError Error InvokeFunction POST /services/{serviceName}/functions/{functionName}/invocations POST /services/{serviceName}.{qualifier}/functions/{functionName}/invocations Description 同步或异步调用function Parameters Type Name Description Schema Default Header Host required 访问域名:$account-id.$region.fc.aliyuncs.com string Header X-Fc-Invocation-Type optional 调用方式:Sync或者Async string "Sync" Path functionName required function名称 string Path serviceName required service名称 string Path qualifier optional service版本, 可以是versionId或者aliasName string Body body required 事件(event),binary type。函数计算服务将event传递给用户function来处理 object Responses HTTP Code Description Schema 200 同步调用成功,返回函数结果 Headers : X-Fc-Error-Type (string) : 调用function的错误类型,分为HandledInvocationError和UnhandledInvocationError两种。. InvokeResponse 202 异步调用,服务器已接受请求但可能尚未处理 No Content 403 拒绝请求,错误码:AccessDenied,InvalidAccessKeyId,SignatureNotMatch,RequestTimeTooSkewed Error 404 service,function,alias或者version不存在,错误码:ServiceNotFound,FunctionNotFound,VersionNotFound,AliasNotFound Error 500 服务内部错误,错误码:InternalServerError Error ListFunctions GET /services/{serviceName}/functions GET /services/{serviceName}.{qualifier}/functions Description 获取function列表 Parameters Type Name Description Schema Default Header Host required 访问域名:$account-id.$region.fc.aliyuncs.com string Path serviceName required service名称 string Path qualifier optional service版本, 可以是versionId或者aliasName string Query limit optional 限定此次返回资源的数量。如果不设定,默认返回20,最大不能超过100。返回结果可能小于指定的数量,但不会多于指定的数量 integer (int32) 20 Query nextToken optional 用来返回更多结果。第一次查询不需要提供这个参数,后续查询的token从返回结果中获取 string Query prefix optional 限定返回的资源名称必须以prefix作为前缀 string Query startKey optional 设定结果从startKey之后(包括startKey)按字母排序的第一个开始返回 string Responses HTTP Code Description Schema 200 请求成功 Response 200 400 请求无效,错误码:InvalidArgument Error 403 拒绝请求,错误码:AccessDenied,InvalidAccessKeyId,SignatureNotMatch,RequestTimeTooSkewed Error 404 service,alias或者version不存在,错误码:ServiceNotFound,VersionNotFound,AliasNotFound Error 500 服务内部错误,错误码:InternalServerError Error Response 200 Name Schema functions optional < functions > array nextToken optional NextToken functions Name Description Schema codeChecksum optional function code包的CRC64值 Example : "5434025278388143772" string codeSize optional 系统返回的function的code包大小,单位为byte Example : 1024 integer (int64) createdTime optional function创建时间 Example : "2016-08-15T15:00:00.000+0000" string description optional Example : "This is a demo hello world function." string functionId optional 系统为每个function生成的唯一ID Example : "2d28e0e9-9ba5-4eed-8b1a-d3d9cd24e737" string functionName optional Example : "helloworld" string handler optional function的执行入口 Example : "hello_world.main" string lastModifiedTime optional function上次修改时间 Example : "2016-08-15T17:00:00.000+0000" string memorySize optional function设置的内存大小,单位为MB Example : 512 integer (int32) runtime optional function运行的语言环境,目前支持nodejs6, nodejs8, python2.7, python3, java8 Example : "nodejs4.4" string timeout optional 运行的超时时间,单位为秒 Example : 10 integer (int32) ListServices GET /services Description 获取service列表 Parameters Type Name Description Schema Default Header Host required 访问域名:$account-id.$region.fc.aliyuncs.com string Query limit optional 限定此次返回资源的数量。如果不设定,默认返回20,最大不能超过100。返回结果可能小于指定的数量,但不会多于指定的数量 integer (int32) 20 Query nextToken optional 用来返回更多结果。第一次查询不需要提供这个参数,后续查询的token从返回结果中获取 string Query prefix optional 限定返回的资源名称必须以prefix作为前缀 string Query startKey optional 设定结果从startKey之后(包括startKey)按字母排序的第一个开始返回 string Responses HTTP Code Description Schema 200 请求成功 Response 200 400 请求无效,错误码:InvalidArgument Error 403 拒绝请求,错误码:AccessDenied,InvalidAccessKeyId,SignatureNotMatch,RequestTimeTooSkewed Error 500 服务内部错误,错误码:InternalServerError Error Response 200 Name Schema nextToken optional NextToken services optional < services > array services Name Description Schema createdTime optional service的创建时间 Example : "2016-08-15T16:06:05.000+0000" string description optional service的简短描述信息 Example : "This is a demo service." string internetAccess optional 设为true让function可以访问公网 Example : true boolean lastModifiedTime optional service上次更新时间 Example : "2016-08-16T18:00:00.000+0000" string logConfig optional log配置,function产生的log会写入这里配置的logstore LogConfig role optional 授予函数计算所需权限的RAM role, 使用场景包含 1. 从用户 bucket 中 copy function code 2. 把 function产生的 log 发送到用户的 logstore 中 3. 为function 在执行中访问其它云资源生成 token Example : "acs:ram::1234567890:role/fc-test" string serviceId optional 系统为每个service生成的唯一ID Example : "2d28e0e9-9ba5-4eed-8b1a-d3d9cd24e737" string serviceName optional Example : "demo-service" string vpcConfig optional vpc配置, 配置后function可以访问指定VPC VPCConfig ListTriggers GET /services/{serviceName}/functions/{functionName}/triggers Description 获取trigger列表 Parameters Type Name Description Schema Default Header Host required 访问域名:$account-id.$region.fc.aliyuncs.com string Path functionName required function名称 string Path serviceName required service名称 string Query limit optional 限定此次返回资源的数量。如果不设定,默认返回20,最大不能超过100。返回结果可能小于指定的数量,但不会多于指定的数量 integer (int32) 20 Query nextToken optional 用来返回更多结果。第一次查询不需要提供这个参数,后续查询的token从返回结果中获取 string Query prefix optional 限定返回的资源名称必须以prefix作为前缀 string Query startKey optional 设定结果从startKey之后(包括startKey)按字母排序的第一个开始返回 string Responses HTTP Code Description Schema 200 请求成功 Response 200 400 请求无效,错误码:InvalidArgument Error 403 拒绝请求,错误码:AccessDenied,InvalidAccessKeyId,SignatureNotMatch,RequestTimeTooSkewed Error 404 service或function不存在,错误码:ServiceNotFound,FunctionNotFound Error 500 服务内部错误,错误码:InternalServerError Error Response 200 Name Schema nextToken optional NextToken triggers optional < TriggerResponse > array ListVersions GET /services/{serviceName}/versions Description 获取version列表 Parameters Type Name Description Schema Default Header Host required 访问域名:$account-id.$region.fc.aliyuncs.com string Path serviceName required service名称 string Query limit optional 限定此次返回资源的数量。如果不设定,默认返回20,最大不能超过100。返回结果可能小于指定的数量,但不会多于指定的数量 integer (int32) 20 Query nextToken optional 用来返回更多结果。第一次查询不需要提供这个参数,后续查询的token从返回结果中获取 string Query startKey optional 设定结果从startKey之后(包括startKey)按版本号排序的第一个开始返回 string Query direction optional 限定返回的资源排序方向 string BACKWARD Responses HTTP Code Description Schema 200 请求成功 Response 200 400 请求无效,错误码:InvalidArgument Error 403 拒绝请求,错误码:AccessDenied,InvalidAccessKeyId,SignatureNotMatch,RequestTimeTooSkewed Error 404 service不存在,错误码:ServiceNotFound Error 500 服务内部错误,错误码:InternalServerError Error Response 200 Name Schema nextToken optional NextToken versions optional < VersionResponse > array direction optional string ListAliases GET /services/{serviceName}/aliases Description 获取alias列表 Parameters Type Name Description Schema Default Header Host required 访问域名:$account-id.$region.fc.aliyuncs.com string Path serviceName required service名称 string Query limit optional 限定此次返回资源的数量。如果不设定,默认返回20,最大不能超过100。返回结果可能小于指定的数量,但不会多于指定的数量 integer (int32) 20 Query nextToken optional 用来返回更多结果。第一次查询不需要提供这个参数,后续查询的token从返回结果中获取 string Query prefix optional 限定返回的资源名称必须以prefix作为前缀 string Query startKey optional 设定结果从startKey之后(包括startKey)按字母排序的第一个开始返回 string Responses HTTP Code Description Schema 200 请求成功 Response 200 400 请求无效,错误码:InvalidArgument Error 403 拒绝请求,错误码:AccessDenied,InvalidAccessKeyId,SignatureNotMatch,RequestTimeTooSkewed Error 404 service不存在,错误码:ServiceNotFound Error 500 服务内部错误,错误码:InternalServerError Error Response 200 Name Schema nextToken optional NextToken aliases optional < AliasResponse > array UpdateFunction PUT /services/{serviceName}/functions/{functionName} Description 更新function Parameters Type Name Description Schema Header Host required 访问域名:$account-id.$region.fc.aliyuncs.com string Header If-Match optional 用于确保实际更改的资源和期望更改的资源是一致的,该值来自Create,Get和Update API的响应 string Path functionName required function名称 string Path serviceName required service名称 string Body function required function更新对象描述 FunctionUpdateFields Responses HTTP Code Description Schema 200 请求成功 Headers : ETag (string) : function etag,用于更改function。以确保实际更改的function和期望更改的function是一致的. FunctionResponse 400 请求无效,错误码:InvalidArgument Error 403 拒绝请求,错误码:AccessDenied,InvalidAccessKeyId,SignatureNotMatch,RequestTimeTooSkewed Error 404 service或function不存在,错误码:ServiceNotFound,FunctionNotFound Error 409 多个线程同时更新,错误码:ConcurrentUpdateError Error 500 服务内部错误,错误码:InternalServerError Error UpdateService PUT /services/{serviceName} Description 更新service Parameters Type Name Description Schema Header Host required 访问域名:$account-id.$region.fc.aliyuncs.com string Header If-Match optional 用于确保实际更改的资源和期望更改的资源是一致的,该值来自Create,Get和Update API的响应 string Path serviceName required service名称 string Body body required service更新描述 ServiceUpdateFields Responses HTTP Code Description Schema 200 请求成功 Headers : ETag (string) : service etag,用于更改service。以确保实际更改的service和期望更改的service是一致的. ServiceResponse 400 请求无效,错误码:InvalidArgument Error 403 拒绝请求,错误码:AccessDenied,InvalidAccessKeyId,SignatureNotMatch,RequestTimeTooSkewed Error 404 service不存在,错误码:ServiceNotFound Error 409 多个线程同时更新,错误码:ConcurrentUpdateError Error 500 服务内部错误,错误码:InternalServerError Error UpdateTrigger PUT /services/{serviceName}/functions/{functionName}/triggers/{triggerName} Description 更新trigger Parameters Type Name Description Schema Header Host required 访问域名:$account-id.$region.fc.aliyuncs.com string Header If-Match optional 用于确保实际更改的资源和期望更改的资源是一致的,该值来自Create,Get和Update API的响应 string Path functionName required function名称 string Path serviceName required service名称 string Path triggerName required trigger名称 string Body body required 更新字段描述 TriggerUpdateFields Responses HTTP Code Description Schema 200 请求成功 Headers : ETag (string) : trigger etag,用于更改trigger。以确保实际更改的trigger和期望更改的trigger是一致的. TriggerResponse 400 请求无效,错误码:InvalidArgument Error 403 拒绝请求,错误码:AccessDenied,InvalidAccessKeyId,SignatureNotMatch,RequestTimeTooSkewed Error 404 service,function,trigger不存在,错误码:ServiceNotFound,FunctionNotFound,TriggerNotFound Error 409 多个线程同时更新,错误码:ConcurrentUpdateError Error 500 服务内部错误,错误码:InternalServerError Error UpdateAlias PUT /services/{serviceName}/aliases/{aliasName} Description 更新alias Parameters Type Name Description Schema Header Host required 访问域名:$account-id.$region.fc.aliyuncs.com string Header If-Match optional 用于确保实际更改的资源和期望更改的资源是一致的,该值来自Create,Get和Update Alias API的响应 string Path serviceName required service名称 string Path aliasName required alias名称 string Body alias required alias更新对象描述 AliasUpdateFields Responses HTTP Code Description Schema 200 请求成功 Headers : ETag (string) : alias etag,用于更改alias。以确保实际更改的alias和期望更改的alias是一致的. AliasResponse 400 请求无效,错误码:InvalidArgument Error 403 拒绝请求,错误码:AccessDenied,InvalidAccessKeyId,SignatureNotMatch,RequestTimeTooSkewed Error 404 aliase或version不存在,错误码:AliasNotFound,VersionNotFound Error 409 多个线程同时更新,错误码:ConcurrentUpdateError Error 500 服务内部错误,错误码:InternalServerError Error createCustomDomain: POST /custom-domains Request: Type Name Description Schema Header Host(required) 用户 endpoint: $account-id.$region.fc.aliyuncs.com string Body body(required) CustomDomainConfig 对象 CustomDomainConfig Response: HTTP Code Description Schema 200 请求成功 CustomDomainResponse 400 请求无效,错误码:InvalidArgument,LimitExceededError,DomainNameNotResolved Error 403 AccessDenied, InvalidAccessKeyId, SignatureNotMatch Error 409 CustomDomainAlreadyExists Error 500 服务内部错误,错误码:InternalServerError Error updateCustomDomain PUT /custom-domains/{CustomDomain} Request: Type Name Description Schema Header Host(required) 用户 endpoint: $account-id.$region.fc.aliyuncs.com string Path CustomDomain(required) 域名 string Body body(required) CustomDomainConfig 对象 CustomDomainConfig Response: HTTP Code Description Schema 200 请求成功 CustomDomainResponse 400 请求无效,错误码:InvalidArgument Error 403 拒绝请求,错误码:AccessDenied, InvalidAccessKeyId, SignatureNotMatch Error 404 CustomDomainNotFound Error 409 CustomDomainAlreadyExist, ConcurrentUpdateError Error 500 服务内部错误,错误码:InternalServerError Error getCustomDomain GET /custom-domains/{domainaName} Request: Type Name Description Schema Header Host(required) 用户endpoint: $account-id.$region.fc.aliyuncs.com string Path CustomDomain(required) 域名 string Response: HTTP Code Description Schema 200 请求成功 CustomDomainResponse 400 请求无效,错误码:InvalidArgument Error 403 拒绝请求,错误码:AccessDenied, InvalidAccessKeyId, SignatureNotMatch Error 404 CustomDomain 不存在,错误码:CustomDomainNotFound Error 500 服务内部错误,错误码:InternalServerError Error listCustomDomain GET /custom-domains Request: Type Name Description Schema Header Host(required) 用户endpoint: $account-id.$region.fc.aliyuncs.com string Query limit(optional) 限定此次返回资源的数量。如果不设定,默认返回20,最大不能超过100。返回结果可能小于指定的数量,但不会多于指定的数量 integer (int32) Query nextToken(optional) 用来返回更多结果。第一次查询不需要提供这个参数,后续查询的token从返回结果中获取。 string Query prefix(optional) 限定返回的资源名称必须以prefix作为前缀。 string Query startKey(optional) 设定结果从 startKey 之后(包括startKey)按字母排序的第一个开始返回 string Response: HTTP Code Description Schema 200 请求成功 CustomDomainResponse 400 请求无效,错误码:InvalidArgument Error 403 拒绝请求,错误码:AccessDenied, InvalidAccessKeyId, SignatureNotMatch Error 500 服务内部错误,错误码:InternalServerError Error deleteCustomDomain DELETE /custom-domains/{domainaName} Request: Type Name Description Schema Header Host(required) 用户endpoint: $account-id.$region.fc.aliyuncs.com string Path CustomDomain(required) 域名名称 string Response: HTTP Code Description Schema 204 请求成功 No Content 400 请求无效,错误码:InvalidArgument Error 403 拒绝请求,错误码:AccessDenied, InvalidAccessKeyId, SignatureNotMatch Error 404 CustomDomain 不存在,错误码:CustomDomainNotFound Error 500 服务内部错误,错误码:InternalServerError Error putProvisionConfig: PUT /services/{ServiceName}.{Qualifier}/functions/{FunctionName}/provision-config Request: Type Name Description Schema Header Host(required) 用户 endpoint: $account-id.$region.fc.aliyuncs.com string Header If-Match optional 用于确保实际更改的资源和期望更改的资源是一致的,该值来自Get和Put API的响应 string Path serviceName required service名称 string Path qualifier required alias名称 string Path functionName required function名称 string Body body required put provision target描述 PutProvisionConfigFields Response: HTTP Code Description Schema 200 请求成功 Headers : ETag (string) : provision config etag, 以确保实际更改的provision config和期望更改的provision config是一致的。 ProvisionTargetResponse 400 请求无效,错误码:InvalidArgument Error 403 AccessDenied, InvalidAccessKeyId, SignatureNotMatch Error 412 Etag不匹配,错误码:PreconditionFailed Error 500 服务内部错误,错误码:InternalServerError Error getProvisionConfig GET /services/{ServiceName}.{Qualifier}/functions/{FunctionName}/provision-config Request: Type Name Description Schema Header Host(required) 用户endpoint: $account-id.$region.fc.aliyuncs.com string Path serviceName required service名称 string Path qualifier required alias名称 string Path functionName required function名称 string Response: HTTP Code Description Schema 200 请求成功 Headers : ETag (string) : provision config etag, 以确保实际更改的provision config和期望更改的provision config是一致的。 ProvisionConfigResponse 400 请求无效,错误码:InvalidArgument Error 403 拒绝请求,错误码:AccessDenied, InvalidAccessKeyId, SignatureNotMatch Error 500 服务内部错误,错误码:InternalServerError Error listProvisionConfigs GET /provision-configs Request: Type Name Description Schema Header Host(required) 用户endpoint: $account-id.$region.fc.aliyuncs.com string Query limit(optional) 限定此次返回资源的数量。如果不设定,默认返回20,最大不能超过100。返回结果可能小于指定的数量,但不会多于指定的数量 integer (int32) Query nextToken(optional) 用来返回更多结果。第一次查询不需要提供这个参数,后续查询的token从返回结果中获取。 string Query serviceName(optional) 限定返回的资源名称必须属于该service。 string Query qualifier(optional) 限定返回的资源名称必须属于该qualifier。qualifier只能是aliasName,且必须和serviceName共同使用 string Response: HTTP Code Description Schema 200 请求成功 Response 200 400 请求无效,错误码:InvalidArgument Error 403 拒绝请求,错误码:AccessDenied, InvalidAccessKeyId, SignatureNotMatch Error 500 服务内部错误,错误码:InternalServerError Error Response 200 Name Schema provisionConfigs optional < ProvisionConfigResponse > array nextToken optional NextToken Definitions Code 支持两种方式提供 code 的 zip 包 指定存储code zip包的ossBucketName和ossObjectName 指定zipFile为zip包的base64编码内容, 在一次请求中必须且只能使用其中的一种。 Name Description Schema ossBucketName optional function code包的bucket name string ossObjectName optional code zip包的object name string zipFile optional 直接在request body中上传code zip包的base64编码 string Error 系统返回的error对象 Name Description Schema errorCode optional 错误码 string errorMessage optional 详细的错误信息描述 string Function Name Description Schema code required 指定code zip包 Code description optional string functionName required function名称 string handler required function执行的入口,具体格式和语言相关 string memorySize optional function的内存规格,单位为MB,最小为128MB,最大1536MB,为64MB的倍数 integer runtime required function的运行环境,目前支持nodejs6, nodejs8, python2.7, python3, java8 string EnvironmentVariables optional 为函数设置的环境变量,可以在函数中获取环境变量的值 map timeout optional function运行的超时时间,单位为秒,最小1秒,最长5分钟,默认3秒。function超过这个时间后会被终止执行 integer initializer optional 初始化 function 执行的入口,具体格式和语言相关 string initializationTimeout optional 初始化 function 运行的超时时间,单位为秒,最小1秒,最长5分钟,默认3秒。初始化 function 超过这个时间后会被终止执行 integer FunctionCodeResponse Name Description Schema checksum optional crc64 checksum Example : "1234567890" string url optional Example : "http://func-code.oss-cn-shanghai.aliyuncs.com/1a2b3c4d5e6f" string FunctionResponse Name Description Schema codeChecksum optional function code包的CRC64值 Example : "5434025278388143772" string codeSize optional 系统返回的function的code包大小,单位为byte Example : 1024 integer (int64) createdTime optional function创建时间 Example : "2016-08-15T15:00:00.000+0000" string description optional Example : "This is a demo hello world function." string functionId optional 系统为每个function生成的唯一ID Example : "2d28e0e9-9ba5-4eed-8b1a-d3d9cd24e737" string functionName optional Example : "helloworld" string handler optional function的执行入口 Example : "hello_world.main" string lastModifiedTime optional function上次修改时间 Example : "2016-08-15T17:00:00.000+0000" string memorySize optional function设置的内存大小,单位为MB Example : 512 integer (int32) runtime optional function运行的语言环境,目前支持nodejs6, nodejs8, python2.7, python3, java8 Example : "nodejs4.4" string EnvironmentVariables optional 为函数设置的环境变量,可以在函数中获取环境变量的值 map timeout optional 运行的超时时间,单位为秒 Example : 10 integer (int32) FunctionUpdateFields function可以更新的字段描述 Name Description Schema code optional 指定code zip包 Code description optional string handler optional function执行的入口,具体格式和语言相关 string memorySize optional function的内存规格,单位为MB,最小为128MB,最大1536MB,为64MB的倍数,默认128MB integer runtime optional function的运行环境,目前支持nodejs6, nodejs8, python2.7, python3, java8 string EnvironmentVariables optional 为函数设置的环境变量,可以在函数中获取环境变量的值 map timeout optional function运行的超时时间,单位为秒,最小1秒,最长5分钟,默认3秒。function超过这个时间后会被终止执行 integer InvokeResponse invoke function返回的结果,函数具体的返回内容由用户解释 Type : binary LogConfig logging 配置 Name Description Schema logstore optional loghub中的logstore名称 string project optional loghub中的project名称 string NextToken 用来返回更多的查询结果。如果这个值没有返回,则说明没有更多结果 Type : string Service service对象描述 Name Description Schema description optional service的简短描述 string internetAccess optional 设为true让function可以访问公网 Example : true boolean logConfig optional log配置,function产生的log会写入这里配置的logstore LogConfig role optional 授予函数计算所需权限的RAM role, 使用场景包含 1. 把 function产生的 log 发送到用户的 logstore 中 2. 为function 在执行中访问其它云资源生成 token Example : "acs:ram::1234567890:role/fc-test" string serviceName required service名称 string vpcConfig optional vpc配置, 配置后function可以访问指定VPC VPCConfig nasConfig optional NAS配置, 配置后function可以访问指定NAS NASConfig ServiceResponse Name Description Schema createdTime optional service的创建时间 Example : "2016-08-15T16:06:05.000+0000" string description optional service的简短描述信息 Example : "This is a demo service." string internetAccess optional 设为true让function可以访问公网 Example : true boolean lastModifiedTime optional service上次更新时间 Example : "2016-08-16T18:00:00.000+0000" string logConfig optional logging 配置,function产生的log会写入这里配置的logstore LogConfig role optional 授予函数计算所需权限的RAM role, 使用场景包含 1. 把 function产生的 log 发送到用户的 logstore 中 2. 为function 在执行中访问其它云资源生成 token Example : "acs:ram::1234567890:role/fc-test" string serviceId optional 系统为每个service生成的唯一ID Example : "2d28e0e9-9ba5-4eed-8b1a-d3d9cd24e737" string serviceName optional Example : "demo-service" string vpcConfig optional vpc配置, 配置后function可以访问指定VPC VPCConfig nasConfig optional NAS配置, 配置后function可以访问指定NAS NASConfig ServiceUpdateFields service可更新字段描述 Name Description Schema description optional string internetAccess optional 设为true让function可以访问公网 Example : true boolean logConfig optional log配置,function产生的log会写入这里配置的logstore LogConfig role optional 授予函数计算所需权限的RAM role, 使用场景包含 1. 把 function产生的 log 发送到用户的 logstore 中 2. 为function 在执行中访问其它云资源生成 token Example : "acs:ram::1234567890:role/fc-test" string vpcConfig optional vpc配置, 配置后function可以访问指定VPC VPCConfig nasConfig optional NAS配置, 配置后function可以访问指定NAS NASConfig Trigger Name Description Schema invocationRole required event source,如OSS,使用该role去invoke function Example : "acs:ram::1234567890:role/fc-test" string sourceArn required event source的Aliyun Resource Name(ARN) Example : "acs:oss:cn-shanghai:12345:mybucket" string triggerConfig required trigger配置,针对不同的trigger类型,trigger配置会有所不同 object triggerName required trigger名称 Example : "image_resize" string triggerType required trigger类型 Example : "oss" string qualifier optional service版本 Example : "LATEST" string TriggerResponse Name Description Schema createdTime optional 创建时间 Example : "2016-08-15T15:00:00.000+0000" string invocationRole optional string lastModifiedTime optional 上次修改时间 Example : "2016-08-15T17:00:00.000+0000" string sourceArn optional string triggerConfig optional object triggerName optional string triggerType optional string qualifier optional string TriggerUpdateFields Name Description Schema invocationRole optional event source,如OSS,使用该role去invoke function Example : "acs:ram::1234567890:role/fc-test" string triggerConfig optional trigger配置,针对不同的trigger类型,trigger配置会有所不同 object qualifier optional service版本 Example : "LATEST" string VPCConfig VPC 配置 Name Description Schema securityGroupId required 安全组ID string vSwitchIds required 一个或多个VSwitch ID < string > array vpcId required VPC ID string NASConfig NAS 配置 Name Description Schema userId required userID string groupId required groupID string mountPoints required 挂载点 < MountPoint > array MountPoint 挂载点 Name Description Schema serverAddr required NAS 服务器地址 string mountDir required 本地挂载目录 string CustomDomainConfig 对象描述 Name Description Schema DomainName(required) 域名 string Protocol(required) HTTP 或 HTTP,HTTPS string ApiVersion(optional) api_version string RouteConfig(optional) 路由表:自定义域名访问时的 path 到 function 的映射 RouteConfig CertConfig(optional) https证书信息 CertConfig RouteConfig 对象描述 Name Description Schema Routes(required) 是路由的数组 PathConfig Array PathConfig 对象描述 Name Description Schema path(required) 自定义域名 request 的路径,例如:”/login/*” string serviceName(required) path 对应的 function 所在的 service,例如:”blogService” string functionName(required) path 对应的 function ,例如:”login” string CertConfig 对象描述 Name Description Schema certName(required) 证书的自定义名字 string privateKey(required) 私钥 string certificate(required) 证书 string CustomDomainResponse 对象描述 Name Description Schema CreatedTime 绑定域名的时间 string LastModifiedTime 更新域名信息的时间 string CustomDomain 用户域名 string Protocol 协议类型 string ApiVersion api 版本 string RouteConfig 路由表配置 RouteConfig CertConfig(optional) https证书信息 CertConfig Version Name Description Schema versionId required service版本号 Example : "1" string description optional service版本描述 Example : "my service version" string VersionResponse Name Description Schema createdTime optional 创建时间 Example : "2016-08-15T15:00:00.000+0000" string lastModifiedTime optional 上次修改时间 Example : "2016-08-15T17:00:00.000+0000" string versionId optional string description optional string Alias Name Description Schema aliasName required service版本别名 Example : "my-alias" string versionId required alias指向的版本 Example : "1" string description optional alias的描述 object additionalVersionWeight optional 灰度发布的版本,以及对应的流量权重 Example : "2:0.05" map AliasResponse Name Description Schema createdTime required 创建时间 Example : "2016-08-15T15:00:00.000+0000" string lastModifiedTime required 上次修改时间 Example : "2016-08-15T17:00:00.000+0000" string aliasName required string versionId required string description optional string additionalVersionWeight optional map AliasUpdateFields Name Description Schema versionID required alias指向的版本 Example : "1" string description optional alias的描述 object additionalVersionWeight optional 灰度发布的版本,以及对应的流量权重 Example : "2:0.05" map PutProvisionConfigFields Name Description Schema target required 目标资源个数 Example : "1" integer (int64) ProvisionTargetResponse Name Description Schema resource required 资源描述 Example : "12345#servierName#qualifier#functionName" string target required 目标资源个数 Example : "1" integer (int64) ProvisionConfigResponse Name Description Schema resource required 资源描述 Example : "12345#servierName#qualifier#functionName" string target required 目标资源个数 Example : "1" integer (int64) current required 实际资源个数 Example : "1" integer (int64) TagResource POST /tag Description 给资源打标签 Parameters Type Name Description Schema Header Host required 访问域名:$account-id.$region.fc.aliyuncs.com string Body body required tagResourceBody json Responses HTTP Code Description Schema 200 给指定的资源打标签成功 无 400 请求无效,错误码: InvalidArgument Error 403 拒绝请求,错误码: AccessDenied,InvalidAccessKeyId,SignatureNotMatch,RequestTimeTooSkewed Error 404 资源不存在,错误码: ServiceNotFound Error 500 服务内部错误,错误码: InternalServerError Error tagResourceBody Argument Type Required Description resourceArn string yes Resource ARN. ARN 全称或者简称 tags string to string map yes tag 字典, length 至少为 1, 最大为 20 注:目前只能给 top level 资源 service 进行标签的相关操作, ARN 可以是类似 services/foo 或者 acs:fc:cn-shanghai:123456789:services/foo UntagResource DELETE /tag Description 给资源取消标签 Parameters Type Name Description Schema Header Host required 访问域名:$account-id.$region.fc.aliyuncs.com string Body body required unTagResourceBody json Responses HTTP Code Description Schema 200 取消指定资源标签成功 无 400 请求无效,错误码: InvalidArgument Error 403 拒绝请求,错误码: AccessDenied,InvalidAccessKeyId,SignatureNotMatch,RequestTimeTooSkewed Error 404 资源不存在,错误码: ServiceNotFound Error 500 服务内部错误,错误码: InternalServerError Error unTagResourceBody Argument Type Required Description resourceArn string yes Resource ARN. ARN 全称或者简称 tagKeys string array no tag key 值列表, 最大为20,当 all=false, length 至少为 1. 当 length 大于 1 时, 可以忽略 all 值 all bool no 删除所有 tag,默认值为 false GetResourceTags GET /tag Description 获取资源所有的标签信息 Parameters Type Name Description Schema Header Host required 访问域名:$account-id.$region.fc.aliyuncs.com string Query resourceArn required Resource ARN. ARN 全称或者简称 string Responses HTTP Code Description Schema 200 获取指定资源标签成功 GetResourceTagsResponse 400 请求无效,错误码: InvalidArgument Error 403 拒绝请求,错误码: AccessDenied,InvalidAccessKeyId,SignatureNotMatch,RequestTimeTooSkewed Error 404 资源不存在,错误码: ServiceNotFound Error 500 服务内部错误,错误码: InternalServerError Error GetResourceTagsResponse Argument Type Description resourceArn string Resource ARN 全称 tags string to string map tag 字典

1934890530796658 2020-03-27 17:57:19 0 浏览量 回答数 0

问题

【阿里云产品公测】消息队列服务MQS java SDK 机器人应用 初体验

啊里新人 2019-12-01 21:08:47 25480 浏览量 回答数 18
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 云栖号物联网 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 2020阿里巴巴研发效能峰会 企业建站模板 云效成长地图 高端建站 云栖号弹性计算 阿里云云栖号 云栖号案例 云栖号直播