Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在构造函数中创建子进程_Python_Multiprocessing_Python Multiprocessing - Fatal编程技术网

Python 在构造函数中创建子进程

Python 在构造函数中创建子进程,python,multiprocessing,python-multiprocessing,Python,Multiprocessing,Python Multiprocessing,我有一个类,它在构造函数中创建一个新进程,如下所示 class data_reader(): def __init__(self,paths_list,queue_limit = 1,parallel = True): print 'data reader constructor' self.paths = paths_list self.count = len(paths_list) self.async = async self.dict = {};

我有一个类,它在构造函数中创建一个新进程,如下所示

class data_reader():
def __init__(self,paths_list,queue_limit = 1,parallel = True):
    print 'data reader constructor'
    self.paths = paths_list
    self.count = len(paths_list)
    self.async = async
    self.dict = {};
    self.lock = multiprocessing.Lock()
    self.queue = multiprocessing.Queue(queue_limit)
    if parallel:
        self.child = multiprocessing.Process(target = self.load_paths,args = (self.paths,self.queue,))
        self.child.daemon = True
        self.child.start()
        print 'child started'
    else:
        self.load_paths(self.paths,self.queue)
此类有另一个函数get_next()从队列中获取数据

def get_next():
        return self.queue.get()
这个函数被称为formmain,如下所示

data_train = data_reader(train_paths_list)
data_valid = data_reader(valid_paths_list)
data_test = data_reader(test_paths_list)
现在,在正常情况下,每当我运行这段代码时,它都可以正常工作,并且随着对象被销毁,子进程也会终止。当我从另一个程序(spearmint)将这个main作为子进程运行时,问题就出现了。构造函数的调用永远不会返回,但会创建一个新的子级。在其他情况下,会创建子项,但

'data reader constructor' 
未打印,并且控件未返回到父级

是否存在一些我无法理解的限制


另外,我正在考虑使用套接字编程来避免这种情况。

我从进程中继承了我的数据读取器

class data_reader(multiprocessing.Process):
并对我的类进行重构,以覆盖Process类中的run函数。此解决方案通过从main调用start()在给定场景中工作