我有一个存储函数的类和一个尝试使用multiprocessing
模块并行运行该函数的方法。我正在使用nose
模块测试类,nose.main()
函数挂起(没有任何反应,没有显示输出,内核必须手动告知停止并重新启动)。我的目录如下:
Parent/
test.py
Code/
__init__.py
code.py
tests/
test_code.py
code.py
包含:
import multiprocessing as mp
import numpy as np
import itertools
def target(): pass
def target_star(args): return target(*args)
class FuncWrapper():
def __init__(self, fun):
self.fun = fun
def run(self, X):
try:
arg_list_objects = []
arg_list_inputs = []
for i in range(len(X)):
arg_list_objects.append(self.fun.im_self)
arg_list_inputs.append(X[i])
target.__code__ = self.fun.im_func.__code__
pool = mp.Pool(processes=mp.cpu_count()-1)
F = np.array(pool.map(target_star, itertools.izip(arg_list_objects, arg_list_inputs))).reshape(X.shape)
pool.close()
pool.join()
except:
F = self.fun(X)
return F
try:
块中的大多数代码用于使pool.map
函数与类方法一起使用。
test_code.py
包含:
import numpy as np
from unittest import TestCase
import unittest
from Code.code import FuncWrapper
class TestCode(TestCase):
def f(self, x):
return x
def test_FuncWrapper(self):
x = np.random.uniform(0, 1, (50, 1))
return FuncWrapper(self.f).run(x)
if __name__ == '__main__':
unittest.main()
test.py
包含:
import nose
nose.main()
当我从Parent文件夹运行test_code.py
时,它成功执行了测试但是当test.py
运行时,没有任何反应。我应该如何使用nose.main
函数使其不挂起,或者nose
模块中是否有另一个可以在这里工作的函数?
我正在使用Ubuntu 14.04 LTS 64位和Enthought Python发行版(Python 2.7.11 64位)及其Canopy IDE。