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 comapre to non parallel pthon 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