【发布时间】:2014-08-14 02:46:04
【问题描述】:
为了加快我的程序,我刚开始阅读有关多处理的文章。 因此,我编写了两个基本示例来从随机数列表中提取素数。
示例 1:使用多处理
from multiprocessing import Process, Queue
from random import randrange
import time
def randomList(q, size, nmax):
l = []
r = randrange(2, nmax)
for i in range(size):
while r in l: # avoid replicating numbers
r = randrange(2, nmax)
l.append(r)
q.put(r)
def checkPrime(numbers, prime):
if numbers.qsize():
n = numbers.get()
count = 0 # divisors counter
d = 2 # divisor
while not count and d<=n/2:
if n%d:
d+=1
else:
count+=1
if not count:
prime.put(n)
if __name__=="__main__":
numbers = Queue()
prime = Queue()
randomList(numbers, 50, 1000) # 50 number | 100 max value
t1 = time.time()
while numbers.qsize():
for i in range(10): # Running 10 processes
p=Process(target=checkPrime, args=(numbers, prime))
p.start()
p.join()
t2 = time.time()
primes = []
for i in range(prime.qsize()):
primes.append(prime.get())
print("[+] Prime numbers:")
print(primes)
print("[+] Time elapsed:"+str(t2-t1))
输出:
[+] Prime numbers:
[17, 227, 389, 593, 953, 757]
[+] Time elapsed:9.41699981689
示例 2:与示例 1 相同,但没有多处理
[...]
while numbers.qsize():
checkPrime(numbers, prime)
[...]
输出:
[+] Prime numbers:
[193, 227, 241, 439, 499, 877, 479, 743, 929]
[+] Time elapsed:0.00999999046326
因此,多处理使这个程序(特别是可能)比不使用它时要慢得多。 有什么解释吗?我用错了吗?
【问题讨论】:
-
无法复制您的问题。多处理返回
Time elapsed:0.311047077179 -
与多处理的开销相比,您的操作太便宜了?
标签: python performance python-2.7 multiprocessing primes