Подтвердить что ты не робот

Очередь очереди python и многопроцессорная очередь: как они себя ведут?

Этот пример кода работает (я могу что-то записать в файле):

from multiprocessing import Process, Queue

queue = Queue()
def _printer(self, queue):
    queue.put("hello world!!")

def _cmdDisp(self, queue):
    f = file("Cmd.log", "w")
    print >> f, queue.get()
    f.close()

вместо этого другой образец не: (объект errormsg: 'module' не может быть вызван)

import Queue

queue = Queue()
def _printer(self, queue):
    queue.put("hello world!!")

def _cmdDisp(self, queue):
    f = file("Cmd.log", "w")
    print >> f, queue.get()
    f.close()

этот другой образец не (я не могу написать что-то в файле):

import Queue

queue = Queue.Queue()
def _printer(self, queue):
    queue.put("hello world!!")

def _cmdDisp(self, queue):
    f = file("Cmd.log", "w")
    print >> f, queue.get()
    f.close()

Может кто-нибудь объяснить различия? и право делать?

4b9b3361

Ответ 1

Для вашего второго примера вы уже сами дали объяснение --- Queue - это модуль, который нельзя вызвать.

В третьем примере: я предполагаю, что вы используете Queue.Queue вместе с multiprocessing. A Queue.Queue не будет передаваться между процессами. Если Queue.Queue объявлен перед процессами, каждый процесс получит копию, которая не зависит от каждого другого процесса. Элементы, размещенные в Queue.Queue родителем перед запуском детей, будут доступны каждому ребенку. Элементы, помещенные в Queue.Queue родителем после запуска дочернего объекта, будут доступны только родителям. Queue.Queue выполняется для обмена данными между различными потоками внутри одного и того же процесса (с помощью модуля threading). Многопроцессорные очереди предназначены для обмена данными между различными процессами Python. Хотя API выглядит аналогично (он был разработан таким образом), основные механизмы принципиально отличаются.

  • multiprocessing очереди обмениваются данными путем сортировки (сериализации) объектов и отправки их по трубам.
  • Queue.Queue использует структуру данных, которая совместно используется потоками и блокировками/мьютексами для правильного поведения.