为什么要这样做?
在将不同应用彼此分离的方面,Docker容器做的相当出色,但是怎样才能使得这些应用能够互相交互呢?比如说,你要用Python开发一款应用,这款应用需要与别的应用进行交互,而该应用又是用另外一种编程语言开发的,怎么办呢。这里有些办法可以使得Python能和其他流行编程语言进行低级别的互相调用 a few techniques。不过,当你遇到一个很棘手的问题 weird case,或者是要处理某个复杂的遗留软件时,这就变得难上加难,甚至成为不可能完成的任务。
解决方案:将容器作为模块 modules
我们来创建一个模块 sidomo – Simple Docker Module*,以便于当你将你棘手的应用带到在任何linux环境中,你都能够不需要额外代价的方式从Python立刻调用它。
目前很多人使用容器Docker Daemon API接口来管理承载着他们应用的容器. (Kubernetes / Mesos 就是这一方案的良好的体现)。 Sidomo为容器开辟了一条全新的道路 — 将棘手的问题软件转换为美好的plain vanilla python模块,使其得以与python无缝对接。
*注:sidomo并不是一个Amazon Web服务 AWS service
怎样使用sidomo
要确保你的容器正常安装,并且运行一个容器daemon。如果你不确定是不是上述的情形,可以运行 docker ps, 得到的输出信息为 “CONTAINER ID …”就对了 。假如你还不清楚怎样正确设置docker容器,你可以check out这个链接 this link 或者点这里搜索 search here 来找到你要的答案。
一行代码配置Sidomo
你可以用pip直接从git分支上安装sidomo。只需要在shell中输入如下命令:
1 |
pip install -e 'git+https://github.com/deepgram/sidomo.git#egg=sidomo' |
实例:一个简单的Hello World
这个操作将从ubuntu基础镜像上开启一个容器,运行echo hello from 然后运行echo the other side,然后从进程中打印输出信息。想要运行这个实例,我们需要使用shell命令将ubuntu镜像pull到你的机器。
1 2 |
# Get the latest Ubuntu image 使用最新的ubuntu镜像 docker pull ubuntu |
1 2 3 4 |
from sidomo import Containerwith Container('ubuntu') as c: for line in c.run('bash -c "echo hello from; echo the other side;"'): print(line) |
现在让我们来实际用sidomo做些有用的东西。FFMPEG是一个比较复杂的软件,能高效的处理媒体文件以达到几乎所有目的,但是在不同的平台上保持一致的安装却不是意见容易的事,而且它没有最新的python绑定。使用Sidomo,你可以把FFMPEG 安装在docker上并用Python运行它。
1
|
docker pull cellofellow /ffmpeg |
下面的例子将从一个URL抓取音频,将其转码,并打印调试信息以证明它运行成功。我们将这个进程的标准输出设置为无效,因为我们只需要看到调试信息。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
from sidomo import Container url = 'http://www2.warwick.ac.uk/fac/soc/sociology/staff/sfuller/media/audio/9_minutes_on_epistemology.mp3' with Container( 'cellofellow/ffmpeg', stdout=False) as c: for line in c.run( 'bash -c \"\ wget -nv -O tmp.unconverted %s;\ ffmpeg -i tmp.unconverted -f wav -acodec pcm_s16le -ac 1 -ar 16000 tmp.wav;\ cat tmp.wav\ \"\ ' % url ): print line |
如果你需要将此程序中转码后的音频数据保存起来,你可以将std=False这一行替换成stderr=False,然后将容器进程输出的每一行(裸音频数据)写到文件中。
乐享未来
如果你不得不为一些复杂的软件编写python绑定,可以考虑用容器化软件代替。在sidomo中,将一个容器化的应用变成python模块是不痛苦的,并且是干净的。
如果你发现自己经常使用子流程且绑定的代码不存在,然那么容器化会使这些过程变简单一些。
在开发完成的python应用中往往存在复杂的依赖关系,如果你使用sidomo,你可能需要把应用包装在容器中,这样能让它更少地依赖外部环境。自从docker支持嵌套容器后,sidomo对这些支持都很好。你可以让你的软件通过使用sidomo引入sidomo,再在里面引入sidomo,这就像俄罗斯套娃一样。
祝你好运!请记住,你能不能让容器化无限制地复杂化装入?
我们为什么要这样做?
我们开放了DeepGram API,这是一个面向音频和视频的搜索引擎,它可以让人的说话声变得可以搜索。DeepGram使用了复杂的信号处理、统计方法、机器学习软件的协调工作,这使得“上传、搜索”的体验变得更加贴合。Sidomo允许我们快速打包运行环境严格的软件,而且他是通过我们的“粘合剂”-Python集成的。
您可以访问www.deepgram.com获取拥有API访问权限的账号。这个账号每个月可以有40小时长度的音视频免费上传额度(这相当长了!)。进来看看吧,让我们知道你需要什么。