Reputation: 13
I am writing python code using parallel processing for random prime no generation. I am using Miller Rabin Algorithm to check prime nos. The parallel python code suppose to run fast as compare to non-parallel python code, but this is not the case. Parallel processing is taking so much time. Here is my python code:
def is_prime(n, k=40):
if n == 2 or n == 3:
return True
if n <= 1 or n % 2 == 0:
return False
# find r and s
s = 0
r = n - 1
while r & 1 == 0:
s += 1
r //= 2
flag=1
jobs=[]
event = multiprocessing.Event()
for i in range(40):
p = multiprocessing.Process(target=primetest,args=(s,r,n,event))
p.start()
jobs.append(p)
while True:
if event.is_set():
flag=0
for i in jobs: # terminating all jobs when event is set
Terminate each process
i.terminate()
break
else:
flag=1
break
if flag==0:
p.join()
p.close()
return False
else:
p.join()
p.close()
return True
def primetest(s,r,n,event):
a = randrange(2, n - 1)
v = pow(a, r, n)
if v != 1: # this test does not apply if v is 1.
i = 0
while v != (n - 1):
if i == s - 1:
#print("value of n",n)
event.set()
return False
else:
i = i + 1
v = (v ** 2) % n
Upvotes: 1
Views: 237