【问题标题】:How to use threads in python如何在python中使用线程
【发布时间】:2010-11-30 23:55:17
【问题描述】:

我想用它来读取 17770 个文件中的值,并将它们全部添加到一个字典对象的末尾。我有一台 8 核的机器。

这是代码

def run_item_preprocess ():
    scores = {};
    for i in range(1,17771):
        filename1 = "x_" + str(i) + ".txt";
        lines1 = open(filename1).readlines();
        Item1 = {};
        for line in lines1:
            tokens = line.split(',');
            Item1[int(tokens[1])] = int(tokens[2]);
        for j in range(1,17771):
            if j == i:
                continue;
            filename2 = "x_" + str(i) + ".txt";
            lines2 = open(filename2).readlines();
            Item2 = {};
            for line in lines2:
                tokens = line.split(',');
                u = int(tokens[1]);
                r = int(tokens[2]);
                if u in Item1:
                    Item2[u] = r;
            if i not in scores:
                scores[i] = {};
            scores[i]= (s(Item1,Item2),j);

【问题讨论】:

  • 我正在寻找可以帮助我的人......我发布了我的代码
  • 我读错了吗?您尝试将 17770 个文件中的每一个打开 17770 次?
  • 在考虑让它在多线程中运行之前,您需要确保代码作为单线程正确运行。我严重怀疑这段代码是否符合您的要求。 (315772900 文件读取?)
  • 是的......我必须这样做......所有文件加起来都是 2.3 Gb
  • 是的,但是打开文件 3 亿次不是答案。数据库可能会有所帮助。我正在尝试弄清楚您对代码的实际操作。

标签: python multithreading


【解决方案1】:

这是精彩的multiprocessing 模块。它允许您使用进程而不是线程来并行化代码。这将使用所有内核。

一个重要的区别是进程不共享内存。队列将有助于减少步骤。

【讨论】:

  • 请注意,OP 说他/她需要“将它们全部添加到一个字典对象的末尾”。这可能会给多处理带来问题。
  • 字典不必共享;如果是的话,会有很多争论。
【解决方案2】:

下面是 python 库参考的一些好的部分。

http://docs.python.org/py3k/library/threading.html

http://docs.python.org/py3k/library/_thread.html

至于如何有效地使用线程,我推荐你谷歌'python线程教程'之类的。

【讨论】:

    【解决方案3】:

    您认为使用线程对此有何帮助?

    虽然 Python 支持线程,但标准实现 (CPython) 执行 only one thread at a time。因此,很难看出这将如何使进程运行得更快,即使在多核上也是如此。

    (不过,如果您使用的是 JPython 或 IronPython,则此限制不适用。)

    【讨论】:

    • 好吧 .. 我的机器上有 8 个内核
    • 是的,假设您使用的是 CPython,那么任何时候只有一个内核会运行 Python 线程。这有什么帮助?
    • 不清楚代码应该做什么,所以很难说它是在 1 个线程还是 8 个线程上工作。但在我看来,这段 Python 代码不能使用线程加速。
    猜你喜欢
    • 2023-04-09
    • 2018-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多