2014-06-30 29 views
1

我試圖寫單元測試的鎖定對象,這樣multiprocess.Pool和單元測試類方法的工作與python3.4

import time 
import unittest 
from multiprocessing import Pool 


class LockTestCase(unittest.TestCase): 

    def f(self, x): 
     time.sleep(1) 

    def test_lock(self): 
     p = Pool(2) 
     p.map(self.f, (1, 1, 1)) 

unittest.main() 

如何讓我們保持f在TestCase類,它的工作原理與python3.3 ,但與python3.4工作,它出來

File "/usr/lib/python3.4/multiprocessing/pool.py", line 260, in map 
    return self._map_async(func, iterable, mapstar, chunksize).get() 
File "/usr/lib/python3.4/multiprocessing/pool.py", line 599, in get 
    raise self._value 
File "/usr/lib/python3.4/multiprocessing/pool.py", line 383, in _handle_tasks 
    put(task) 
File "/usr/lib/python3.4/multiprocessing/connection.py", line 206, in send 
    self._send_bytes(ForkingPickler.dumps(obj)) 
File "/usr/lib/python3.4/multiprocessing/reduction.py", line 50, in dumps 
    cls(buf, protocol).dump(obj) 
TypeError: cannot serialize '_io.TextIOWrapper' object 

那麼,如何類方法f在游泳池中python3.4作品?

謝謝

回答

0

我的解決方案是定義LockTestCase之外的函數'f'。也許這是最簡單的。但是,無論如何,只要運行'map'方法就可以運行'f'。