我正在生成相当大的图像,因此我想将其线程化以立即渲染图像的不同部分。
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。
答案 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]