使用Blender和Twisted(Python)进行服务器端渲染
我现在正在做的项目基本上是接收一张图片,然后通过命令行使用Blender生成一个视频。目前我在用Twisted来处理请求,但我觉得我可能做错了什么,因为它的工作方式并不是我想要的。你可以在这里看到这个程序的大致情况(我已经去掉了一些不必要的部分)。
Blender的渲染是通过启动一个子进程来完成的(我知道Twisted可以处理进程),同时还用到一个Python脚本来配置渲染,并使用提供的图片作为纹理。
这个程序需要能够处理尽可能多的连接。目前子进程一次只渲染一个,但理想情况下,它应该检查CPU和并行渲染的数量,并调整到最佳状态。每个渲染都是针对用户的,所以一旦用户的渲染完成,他们应该能收到自己的渲染结果(一个avi文件)。
我想问的是:Twisted适合这个项目吗?还有其他选择吗?如果不适合,我的系统实现有什么问题吗?我很希望能听到大家的想法或意见!
1 个回答
Twisted适合这个吗?
- 可能适合。
还有其他选择吗?
- 有的。
如果没有,我的系统实现有问题吗?
- 有问题。看起来你的子进程调用是阻塞的:p.wait()
你想做的事情在Twisted中是可以实现的,但你离目标还有很长的路要走。
你需要一个可以控制速度的异步任务队列,并且要有一个网页前端。
你现在的情况是一个单线程的“网站”上的单页面,直到提交的任务完成之前不会返回任何HTML。
在Twisted中这是可以做到的。不过,使用Django和Celery实现起来可能更简单。
Django: http://www.djangoproject.com/
Celery: http://celery.github.com/celery/getting-started/introduction.html
还有一个类似目的的教程:
http://webcookies.org/blog/2009/09/10/rabbitmq-celery-and-django/