Python多线程图像渲染

时间:2014-01-18 17:28:59

标签: python multithreading

我正在生成相当大的图像,因此我想将其线程化以立即渲染图像的不同部分。

for startX in xrange(0, width, threadChunk):
    t = Thread(target = threaded_chunk, args = (thread_num, startX, startX + threadChunk, 1, 0, height, 1))
    t.start()
    t.join()
    print 'next thread'
    thread_num += 1

然而,这似乎并没有我认为应该做的事情 - 在我看来它等待一个线程完成然后进入下一个线程。我发现这一点是因为我的实际线程函数(threaded_chunk)在最后有一个print语句,它通知我线程已经完成。当我运行程序时,shell看起来像这样:

Thread 1 completed
next thread
Thread 2 completed
next thread
# etc

因此,它正在等待一个人完成,然后再运行下一个。

我正在使用t.join()因为我想在所有线程完成后执行最后一步image.save(imagepath)

有没有办法一次运行多个线程,但是等到所有线程都完成执行任务?谢谢!

编辑:我当前的方法适用于Ubuntu 12.04 LTS,但不适用于Windows 8.1。

1 个答案:

答案 0 :(得分:2)

首先应该启动所有线程,然后等待它们。你可以这样做:

threads = []
for startX in xrange(0, width, threadChunk):
    t = Thread(target = threaded_chunk, args = (thread_num, startX, startX + threadChunk, 1, 0, height, 1))
    threads.append(t)
    print 'next thread'

[t.start() for t in threads]
[t.join() for t in threads]