Прямо сейчас, когда я порождаю дочерний процесс, я создаю экземпляр очереди сообщений в родительском процессе и передаю ее дочернему элементу в аргументах конструктора, например, так:
import multiprocessing as mp
class testProcess(mp.Process):
def __init__(self, msgQueue):
mp.Process.__init__(self, daemon=True)
self.msgQueue = msgQueue
if __name__ == "__main__":
# Instantiate queue in parent process and pass to child:
msgQueue = mp.Queue()
t = testProcess(msgQueue)
Я делаю это, потому что всепримеры, которые я видел, когда я изучал, как использовать многопроцессорность, делали это таким образом.
Однако у меня сейчас много дочерних процессов, и становится уродливо порождать кучу очередей вродительский процесс и отслеживать их. Было бы чётче порождать очередь в методе __init__
дочернего процесса и просто обращаться к нему в родительском элементе как к части пространства имен дочернего процесса, например так:
import multiprocessing as mp
class testProcess(mp.Process):
def __init__(self):
mp.Process.__init__(self, daemon=True)
# Instantiate queue from within child __init__:
self.msgQueue = mp.Queue()
if __name__ == "__main__":
t = testProcess()
# Now I can access the queue like so:
t.msgQueue.put("hi there child")
Я думаю, технически __init__
оператор класса Process в любом случае выполняется в родительском процессе (я так думаю?), Поэтому я не думаю, что это может иметь какое-либо значение.
Итак, мой вопрос, я получу ударс какой-то проблемой позже, если я создаю экземпляры очередей в операторе дочернего процесса __init__
? Есть ли преимущество в любом случае? Или они эквивалентны?