diff options
author | Sybren A. Stüvel <sybren@stuvel.eu> | 2016-01-22 11:01:39 +0100 |
---|---|---|
committer | Sybren A. Stüvel <sybren@stuvel.eu> | 2016-01-22 11:01:39 +0100 |
commit | a26f518df5eb42d004c0fc19dfdb630aecb182f7 (patch) | |
tree | c3891b22cccfab224fa989f1a66656c04126318e | |
parent | 2e900cae53f69c660b782b6d49234b6ca7b2379e (diff) | |
download | rsa-git-a26f518df5eb42d004c0fc19dfdb630aecb182f7.tar.gz |
Fix #27: Close Pipes at parallel version of genprime.
Now closing pipes after reading result, and added a unittest.
-rw-r--r-- | rsa/parallel.py | 14 | ||||
-rw-r--r-- | tests/test_parallel.py | 20 |
2 files changed, 29 insertions, 5 deletions
diff --git a/rsa/parallel.py b/rsa/parallel.py index e5034ac..17a10ed 100644 --- a/rsa/parallel.py +++ b/rsa/parallel.py @@ -65,11 +65,15 @@ def getprime(nbits, poolsize): (pipe_recv, pipe_send) = mp.Pipe(duplex=False) # Create processes - procs = [mp.Process(target=_find_prime, args=(nbits, pipe_send)) - for _ in range(poolsize)] - [p.start() for p in procs] - - result = pipe_recv.recv() + try: + procs = [mp.Process(target=_find_prime, args=(nbits, pipe_send)) + for _ in range(poolsize)] + [p.start() for p in procs] + + result = pipe_recv.recv() + finally: + pipe_recv.close() + pipe_send.close() [p.terminate() for p in procs] diff --git a/tests/test_parallel.py b/tests/test_parallel.py new file mode 100644 index 0000000..1a69e9e --- /dev/null +++ b/tests/test_parallel.py @@ -0,0 +1,20 @@ +"""Test for multiprocess prime generation.""" + +import unittest + +import rsa.prime +import rsa.parallel +import rsa.common + + +class ParallelTest(unittest.TestCase): + """Tests for multiprocess prime generation.""" + + def test_parallel_primegen(self): + p = rsa.parallel.getprime(1024, 3) + + self.assertFalse(rsa.prime.is_prime(p - 1)) + self.assertTrue(rsa.prime.is_prime(p)) + self.assertFalse(rsa.prime.is_prime(p + 1)) + + self.assertEqual(1024, rsa.common.bit_size(p)) |