multiprocessing Mesh python script

lukeiamyourfather在http://resources.realflow.com上面共享了他的Multithreaded Mesh Proces脚本,这个脚本是用来实现realflow的多线程输出mesh,虽然realflow的nogui模式有"-threads"这个参数,但你会发现即使你指定了"n"个线程,也是没什么不同的,不管是版4还是版本5,lukeiamyourfather的这个脚本很好的解决了这个问题,他把真正的多线程引入到了realflow的mesh输出。
但是他这个脚本是基于python 3.x来写的,你必须使用python 3.x,不然会出错,因为他用到的一些模块在3.x版本里改名了,如果需要用2.6来运行必须将名称改回来。
参考他的脚本,我使用multiprocessing模块也写了一个,multiprocessing在2.6时被归入了标准库,这样3.x版本应该也能用(我没装,所以没试过),不同的是我这个脚本开始的输出信息可能会有点乱,而他的不会(他加了很多锁,我一个也没),其它的基本一致,我试过对比两个脚本的速度,很接近。
"""
#####################################
## ##
## multiprocessingMesh v0.1 ##
## Author: Mack Stone ##
## Date: 2011/01/22 ##
## Email: schistone@gmail.com ##
## blog: http://schi.iteye.com ##
## ##
#####################################
"""
import multiprocessing
import time
import subprocess
import sys, os

# realflow install path
# realflow安装路径,你可能要改它
realflowRootPath = r'C:\Program Files\Next Limit\RealFlow 5'

# print time info
# 输出时间信息
timeInfo = lambda *args: str(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time())))

# Dump subprocess output to /dev/null to keep the terminal window output clean
# 为了让命令行窗口显得干净点
outPut = open('NUL')

# multiprocess class
# 我要输出我想要的信息,所以重写Process
class MeshProcess(multiprocessing.Process):
def __init__(self, func, args, name=''):
super(MeshProcess, self).__init__()
self.name = name
self.func = func
self.args = args

def run(self):
print '>%s -->' % timeInfo(), 'Starting', self.name
self.res = self.func(*self.args)
print '>>%s -->' % timeInfo(), self.name, 'exited'

# start realflow to process mesh
# 使用realflow进行mesh
def processMesh(q, scene, thread):
while not q.empty():
startFrame, endFrame = q.get()
print '>%s -->' % timeInfo(), 'Thread %d starting meshing frame %d - %d' % (thread, startFrame, endFrame)
subprocess.Popen('realflow.exe -nogui -threads 1 -mesh -range %s %s "%s"' % (startFrame, endFrame, scene),
stdout=outPut, stderr=outPut, shell=True, cwd=realflowRootPath).wait()
print '>%s -->' % timeInfo(), 'Thread %d finished meshing frame %d - %d' % (thread, startFrame, endFrame)

def main(args):
helpText = r"""#####################################
## ##
## multiprocessingMesh v0.1 ##
## Author: Mack Stone ##
## Date: 2011/01/22 ##
## Email: schistone@gmail.com ##
## blog: http://schi.iteye.com ##
## ##
#####################################

usage: C:\Python26\python.exe multiprocessingMesh.py startFrame endFrame threadCount sceneFile
Example: C:\Python26\python.exe multiprocessingMesh.py 0 100 8 C:\test\test.flw
"""
# if argv not right print out help
# 输出帮助信息
if len(args) < 4 or not os.path.isfile(args[3]):
print helpText
return 0

startFrame = int(args[0])
endFrame = int(args[1])
threads = int(args[2])
sceneFile = r'%s' % args[3]

# Populate frameList for each threads
# 计算帧列表
frameList = []
incr = (endFrame + 1) / (threads * 2) + 1
startList = [i for i in range(startFrame, endFrame+1, incr)]
endList = [i-1 for i in range(startFrame, endFrame+1, incr)]
endList.append(endFrame)
endList.pop(0)
frameList = zip(startList, endList)

process = []
q = multiprocessing.Queue() # 创建列队

print '>%s -->' % timeInfo(), "Begin meshing process..."
print '>>...'
# create threads
# 创建线程
for i in range(threads):
x = i + 1
p = MeshProcess(processMesh, (q, sceneFile, x),
"Thread %d" % x)
process.append(p)

# start threads
# 线程开始
for i in range(threads):
process[i].start()

# Fill the queue
# 将帧列表放到列队中排队
for f in frameList:
q.put(f)

# end threads
# 线程任务完成,结束线程
for i in range(threads):
process[i].join()

print '>>>...'
print '>>%s -->' % timeInfo(), "End of meshing process"

# exit
# 退出
sys.exit()

if __name__ == '__main__':
main(sys.argv[1:])

使用视频
[url]http://u.115.com/file/f455884023#[/url]
multiprocessingMesh.mp4

希望对你们有帮助
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于SpringBoot+Vue的乡政府管理系统是一个现代化的Web应用程序,它使用了当今流行的技术栈来实现高效的后端服务和交互式的前端界面。以下是该系统使用的主要技术和功能介绍: 技术栈: SpringBoot:一个快速开发的框架,用于构建独立的、生产级别的Spring应用程序。它简化了配置过程,提供了大量默认配置,使得项目启动和运行更加便捷。 Vue.js:一个渐进式的JavaScript框架,用于构建用户界面。它易于上手,同时能够与其它库或已有项目整合,为开发者提供灵活性。 MySQL:一个关系型数据库管理系统,用于存储和管理数据。它支持标准的SQL语言,并且具有高性能、稳定性和易用性的特点。 功能模块: 用户管理:包括用户注册、登录、权限控制等功能,确保系统的安全性和用户的身份验证。 信息发布:允许管理员发布公告、通知等信息,以便及时传达给相关人员。 文件管理:提供文件上传、下载、删除等功能,方便管理和共享文档资料。 数据统计:对系统的数据进行统计和分析,生成报表和图表,帮助决策者做出明智的决策。 任务管理:支持任务的创建、分配、跟踪和完成情况的记录,提高工作的效率和协作性。 留言板:提供一个平台供用户之间进行交流和讨论,促进信息共享和问题解决。 日志记录:记录系统的运行情况和用户的操作行为,便于问题的排查和安全审计。 数据备份与恢复:定期备份数据并能够在需要时进行恢复,保障数据的完整性和可靠性。 系统设置:允许管理员对系统的各项参数进行配置和管理,以满足不同场景的需求。 以上是该乡政府管理系统的主要技术和功能介绍。通过这些技术和功能的整合,该系统能够提供高效、安全、便捷的管理服务,满足乡政府的日常工作需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值