代码之家  ›  专栏  ›  技术社区  ›  helloandre

在python中练习线程

  •  2
  • helloandre  · 技术社区  · 17 年前

    我知道Python有一个 global lock python multithreading

    以下是正在发生的事情(伪代码):

    for pixels in picture:
        apply sobel operator horizontal
    for pixels in picture:
        apply sobel operator vertical
    

    info on sobel operator .

    这两个循环可以完全独立运行,因此是多线程的主要候选者。(在任何非常大的图片上运行这两个循环可能需要10+秒)。然而,当我试图使用 threading python中的模块,由于全局锁,它需要两倍的时间。我的问题是,我是否应该放弃在python的两个线程中完成这项工作的所有希望,转而尝试使用另一种语言?如果我能勇往直前,我应该使用什么模块?如果没有,我应该用什么语言进行实验?

    5 回复  |  直到 9 年前
        1
  •  7
  •   Jay    17 年前

    Python 2.6现在包括 mulitprocessing processing 旧版本Python上的模块)。

    模块,但将执行启动到单独的进程而不是线程中。与线程模块方法相比,这允许Python利用多个内核/CPU,并且可以很好地扩展到CPU密集型任务。

        2
  •  3
  •   John Fouhy    17 年前

    如果sobel运算符受CPU限制,那么您将无法从多线程中获得任何好处,因为python不利用多核。

    可以想象,你可以剥离多个进程,尽管我不确定这是否适用于处理单个图像。

    10秒似乎不是很多时间可以浪费。如果您担心时间,因为您将处理许多图像,那么运行多个进程并让每个进程处理图像的单独子集可能会更容易。

        3
  •  2
  •   mikelikespie    17 年前

    我还建议按照周的建议使用多处理。

    不管怎样,如果你真的想练习线程,我建议你在C中尝试使用PThreads。PThreads在基本情况下使用起来非常简单,并且可以在任何地方使用。

        4
  •  0
  •   HUAGHAGUAH    17 年前

    像Sobel算子这样的批量矩阵运算肯定会通过(正确地)使用 Matlab/Octave NumPy

        5
  •  0
  •   Gert    17 年前

    如果你想用Python练习并行编程,Python多线程处理是正确的选择。如果你没有Python 2.6(例如,如果你使用的是Ubuntu,你就没有),你可以使用 Google code backported