在构造函数中创建子进程
Child process creation in constructor
我有一个 class 可以在构造函数中创建一个新进程,如下所示
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)
这个class有另一个函数get_next()从队列
中获取数据
def get_next():
return self.queue.get()
这个函数是这样调用form main的
data_train = data_reader(train_paths_list)
data_valid = data_reader(valid_paths_list)
data_test = data_reader(test_paths_list)
现在在正常情况下,每当我 运行 这段代码时,它都可以正常工作,并且子进程会随着对象被销毁而终止。当我 运行 这个 main 作为来自另一个程序的子进程时,问题就来了 (spearmint https://github.com/JasperSnoek/spearmint )。对构造函数的调用永远不会 return 但会创建一个新的子对象。在其他情况下,子项已创建,但
的消息
'data reader constructor'
未打印且控件未 return 编辑到父级。
有什么限制我无法理解吗
PS。我正在考虑使用套接字编程来避免这种情况。
我从 Process as
继承了我的 data_reader
class data_reader(multiprocessing.Process):
并重构了我的 class 以覆盖进程 class 中的 运行 函数。该解决方案通过从 main
调用 start() 在给定场景中工作
我有一个 class 可以在构造函数中创建一个新进程,如下所示
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)
这个class有另一个函数get_next()从队列
中获取数据def get_next():
return self.queue.get()
这个函数是这样调用form main的
data_train = data_reader(train_paths_list)
data_valid = data_reader(valid_paths_list)
data_test = data_reader(test_paths_list)
现在在正常情况下,每当我 运行 这段代码时,它都可以正常工作,并且子进程会随着对象被销毁而终止。当我 运行 这个 main 作为来自另一个程序的子进程时,问题就来了 (spearmint https://github.com/JasperSnoek/spearmint )。对构造函数的调用永远不会 return 但会创建一个新的子对象。在其他情况下,子项已创建,但
的消息'data reader constructor'
未打印且控件未 return 编辑到父级。
有什么限制我无法理解吗
PS。我正在考虑使用套接字编程来避免这种情况。
我从 Process as
继承了我的 data_readerclass data_reader(multiprocessing.Process):
并重构了我的 class 以覆盖进程 class 中的 运行 函数。该解决方案通过从 main
调用 start() 在给定场景中工作