您可以使用多处理池来创建进程以提高性能。假设您有一个用于处理图像的函数 handle_file。如果您使用迭代,它最多只能使用一个核心的 100%。为了利用多核,池多处理为您创建子进程,并将您的任务分配给它们。这是一个例子:
import os
import multiprocessing
def handle_file(path):
print 'Do something to handle file ...', path
def run_multiprocess():
tasks = []
for filename in os.listdir('.'):
tasks.append(filename)
print 'Create task', filename
pool = multiprocessing.Pool(8)
result = all(list(pool.imap_unordered(handle_file, tasks)))
print 'Finished, result=', result
def run_one_process():
for filename in os.listdir('.'):
handle_file(filename)
if __name__ == '__main__':
run_one_process
run_multiprocess()
run_one_process 是处理数据的单核方式,简单但速度慢。另一方面,run_multiprocess 创建 8 个工作进程,并将任务分配给它们。如果你有 8 个核心,它会快 8 倍。我建议您将工作人员数量设置为核心数量的两倍或恰好是核心数量。您可以尝试一下,看看哪种配置更快。
对于高级分布式计算,您可以使用ZeroMQ作为 larsmans 提到的。一开始很难理解。但是一旦你理解了它,你就可以设计一个非常高效的分布式系统来处理你的数据。在您的情况下,我认为一个具有多个 REP 的 REQ 就足够了。
希望这会有所帮助。