用python练习线程

2024-04-19 07:14:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道Python有一个global lock,我读过Glyph对python multithreading的解释。但我还是想试试。作为一个简单(概念上)的任务,我决定对图片进行水平和垂直边缘检测。在

发生了什么(伪代码):

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

info on sobel operator。在

这两个循环可以完全独立运行,因此是多线程处理的主要候选对象。(在任何大图片上运行这两个循环可能需要10秒以上)。但是,当我尝试在python中使用threading模块时,由于全局锁,它需要两倍的时间。我的问题是,我是否应该放弃在python中使用两个线程来实现这一点的所有希望,而尝试使用另一种语言?如果我可以继续前进,我应该使用什么模块?如果没有,我应该用什么语言做实验?在


Tags: 模块in语言lock概念for图片global
3条回答

如果sobel操作符受CPU限制,那么您不会从多个线程中获得任何好处,因为python不会利用多个内核。在

可以想象,你可以分离出多个进程,但我不确定这对于处理一个图像是否可行。在

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

我也推荐使用NumPy。它不仅可能更快,而且如果使用线程,就不会有全局锁。在

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

不管怎样,如果你真的想练习线程,我建议你在C中使用PThreads。PThreads对于基本情况来说非常简单,而且到处都在使用。在

Python2.6现在包含了mulitprocessing模块(以前是Python旧版本上的processing模块)。在

它与线程化模块具有本质上相同的接口,但将执行启动到单独的进程中,而不是线程中。这使得Python能够利用多核/CPU,并且与线程模块方法相比,对于CPU密集型任务,Python可以很好地伸缩。在

相关问题 更多 >