在测试使用多处理的代码时,nose.main挂起

时间:2016-10-21 19:47:39

标签: python python-2.7 python-multiprocessing nose

我有一个存储函数的类和一个尝试使用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。

0 个答案:

没有答案