Deadlock problem using multiprocessing
蓝色基因
bluegene8210 at gmail.com
Sat Sep 10 23:54:01 EDT 2011
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!
More information about the Python-list
mailing list