This is my first touch on the multiprocessing module, and I admit not
having a deep understanding of parallel programming, forgive me if
there's any obvious error. This is my test code:

# deadlock.py

import multiprocessing

class MPTask:
        def __init__(self):
                self._tseq= range(10)   # task sequence
                self._pool= multiprocessing.Pool(2)     # process pool
        def _exe(self, num):
                return num**2
        def run(self):
                result= self._pool.map_async(self._exe, self._tseq)
                return result.get()

result= MPTask().run()
print(result)

And seemingly it creates a deadlock, I have to manually kill the
processes in the system monitor, yet it would be OK if the _exe()
function was defined outside the MPTask class:

# no_deadlock.py
import multiprocessing

def _exe(num):
        return num**2

class MPTask:
        def __init__(self):
                self._tseq= range(10)   # task sequence
                self._pool= multiprocessing.Pool(2)     # process pool
        def run(self):
                result= self._pool.map_async(_exe, self._tseq)
                return result.get()

result= MPTask().run()
print(result)

This would give the correct answer without any deadlock. My questions:

1. Why is this, where did the deadlock come from?

2. Besides, is there any material I can refer to about how to avoid
deadlocks when using multiple processes in the program?

Thanks!

-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to