--大家好,--
我有大约4000 (1-50MB)个文件要排序。
我在考虑让Python调用Linux排序命令。由于我认为这可能有一些I/O限制,所以我将使用线程库。
这是我所拥有的,但当我运行它并观察系统监视器时,我没有看到25个排序任务弹出。它似乎是一次运行一个?我做错了什么?
...
print "starting sort"
def sort_unique(file_path):
"""Run linux sort -ug on a file"""
out = commands.getoutput('sort -ug -o "%s" "%s"' % (file_path, file_path))
assert not out
pool = ThreadPool(25)
for fn in os.listdir(target_dir):
fp = os.path.join(target_dir,fn)
pool.add_task(sort_unique, fp)
pool.wait_completion()发布于 2011-11-04 01:05:46
你做的每件事都是正确的。
在python中有一种叫做的东西;
全局解释器锁-最终导致python一次只执行一个线程。
选择subprocess :),python不是多线程的。
发布于 2011-11-04 01:09:51
实际上,这似乎确实起作用了。我说得太早了。我不确定你们是想删掉这个还是怎么的?真对不起。
发布于 2011-11-04 04:18:55
通常,人们通过产生多个进程来做到这一点。multiprocessing模块使这项工作变得很容易。
另一方面,Python非常擅长排序,所以为什么不直接将文件读入字符串列表file.readlines()中,然后在Python中对其进行排序。您必须编写一个与list.sort()一起使用的key函数来执行-g选项,并且还必须删除重复的选项,即-u选项。删除重复项的最简单方法(也是一种快速方法)是在进行排序之前执行list(set(UNsortedfile))。
https://stackoverflow.com/questions/7998850
复制相似问题