首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python -从线程池调用Linux命令不起作用

Python -从线程池调用Linux命令不起作用
EN

Stack Overflow用户
提问于 2011-11-04 01:00:05
回答 3查看 380关注 0票数 0

--大家好,--

我有大约4000 (1-50MB)个文件要排序。

我在考虑让Python调用Linux排序命令。由于我认为这可能有一些I/O限制,所以我将使用线程库。

这是我所拥有的,但当我运行它并观察系统监视器时,我没有看到25个排序任务弹出。它似乎是一次运行一个?我做错了什么?

代码语言:javascript
复制
...
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()

Here's where ThreadPool comes from,也许它坏了?

EN

回答 3

Stack Overflow用户

发布于 2011-11-04 01:05:46

你做的每件事都是正确的。

在python中有一种叫做的东西;

全局解释器锁-最终导致python一次只执行一个线程。

选择subprocess :),python不是多线程的。

票数 1
EN

Stack Overflow用户

发布于 2011-11-04 01:09:51

实际上,这似乎确实起作用了。我说得太早了。我不确定你们是想删掉这个还是怎么的?真对不起。

票数 0
EN

Stack Overflow用户

发布于 2011-11-04 04:18:55

通常,人们通过产生多个进程来做到这一点。multiprocessing模块使这项工作变得很容易。

另一方面,Python非常擅长排序,所以为什么不直接将文件读入字符串列表file.readlines()中,然后在Python中对其进行排序。您必须编写一个与list.sort()一起使用的key函数来执行-g选项,并且还必须删除重复的选项,即-u选项。删除重复项的最简单方法(也是一种快速方法)是在进行排序之前执行list(set(UNsortedfile))

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7998850

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档