我不得不做大量的I/O绑定操作,即解析大文件并将其从一种格式转换为其他格式。最初我曾经连续做过,即一个接一个地解析。性能非常差(使用时间超过90秒)。所以我决定使用线程来提高性能。我为每个文件创建了一个线程。 (4条)python线程和性能?
for file in file_list:
t=threading.Thread(target = self.convertfile,args = file)
t.start()
ts.append(t)
for t in ts:
t.join()
但是令我惊讶的是,没有任何性能改善。现在也需要大约90多秒才能完成任务。由于这是I/O界限操作,我曾预计会提高性能。
感谢delty..But多处理模块有它自己的问题。 1)我不得不重构我的代码,因为我不能使用实例方法.. 2)我有一个实例方法,它有很多文件处理程序..这些文件处理程序在子进程中被关闭是不可接受的。所以我需要再次打开它们。不幸的是,我没有办法知道它们,因为它们是在实例化过程中传递的。 – kumar 2010-06-10 08:43:23
它不一定是在单独的进程中执行的转换函数本身。有什么办法可以在单独的进程中执行实例化部分?例如。编写一个函数,甚至是一个单独的脚本来完成单个实例化和转换;然后编写一个使用多处理模块的“主脚本”来运行这些功能。单独的脚本可以使用[subprocess](http://docs.python.org/library/subprocess.html)模块运行。如果有很多共享数据,那么是的,这就是多处理复杂化的地方。但是该模块中有更多的工具:) – detly 2010-06-10 08:54:29