我想要并行执行某些操作,但总是会变慢。我举了两个可以比较的代码片段的例子。我的笔记本电脑需要12秒的多处理方式。顺序的方式只有3秒。我认为多处理速度更快。 我知道这样做的任务没有任何意义,但只是比较两种方式。我知道冒泡排序可以用更快的方式取代。Python中的多处理并不比按顺序执行更快
谢谢。
多处理方式:
from multiprocessing import Process, Manager
import os
import random
myArray = []
for i in range(1000):
myArray.append(random.randint(1,1000))
def getRandomSample(myset, sample_size):
sorted_list = sorted(random.sample(xrange(len(myset)), sample_size))
return([myset[i] for i in sorted_list])
def bubbleSort(iterator,alist, return_dictionary):
sample_list = (getRandomSample(alist, 100))
for passnum in range(len(sample_list)-1,0,-1):
for i in range(passnum):
if sample_list[i]>alist[i+1]:
temp = alist[i]
sample_list[i] = alist[i+1]
sample_list[i+1] = temp
return_dictionary[iterator] = sample_list
if __name__ == '__main__':
manager = Manager()
return_dictionary = manager.dict()
jobs = []
for i in range(3000):
p = Process(target=bubbleSort, args=(i,myArray,return_dictionary))
jobs.append(p)
p.start()
for proc in jobs:
proc.join()
print return_dictionary.values()
另一种方式:
import os
import random
myArray = []
for i in range(1000):
myArray.append(random.randint(1,1000))
def getRandomSample(myset, sample_size):
sorted_list = sorted(random.sample(xrange(len(myset)), sample_size))
return([myset[i] for i in sorted_list])
def bubbleSort(alist):
sample_list = (getRandomSample(alist, 100))
for passnum in range(len(sample_list)-1,0,-1):
for i in range(passnum):
if sample_list[i]>alist[i+1]:
temp = alist[i]
sample_list[i] = alist[i+1]
sample_list[i+1] = temp
return(sample_list)
if __name__ == '__main__':
results = []
for i in range(3000):
results.append(bubbleSort(myArray))
print results
非常感谢。 所以一个普通的电脑(我有一个Mac-Air)只有一个核心,因此当我在其上执行程序时,我不能从多处理中受益?但是如果我在多内核计算机上执行操作,我会受益吗? – TheOnlyOne11
@ TheOnlyOne11:如果您的计算机只有一个内核,您将不会从这种情况下的多处理中受益。如果你有多个内核,你将会受益,正如我在回复中写道的那样,我的四核心机器在四分之一时间内完成了测试。 – niemmi