此示例代码有效(我可以在文件中写一些东西):

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:“模块”对象不可调用)
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()

有人可以解释差异吗?和做事的权利?

最佳答案

对于第二个示例,您已经自己给出了解释-Queue是一个模块,无法调用。

对于第三个示例:我假设您将Queue.Queuemultiprocessing一起使用。 Queue.Queue将不会在进程之间共享。如果在进程之前声明了Queue.Queue,则每个进程将收到其副本,该副本与其他所有进程无关。 parent 在 child 开始之前放置在Queue.Queue中的项目将对每个 child 可用。父级在启动子级后放置在Queue.Queue中的项目仅对父级可用。 Queue.Queue用于在同一进程内使用threading模块在不同线程之间进行数据交换。多处理队列用于在不同的Python 进程之间进行数据交换。尽管API看起来很相似(它就是那样设计的),但其底层机制却根本不同。

  • multiprocessing队列通过腌制(序列化)对象并通过管道发送它们来交换数据。
  • Queue.Queue使用线程和锁/互斥锁之间共享的数据结构,以确保行为正确。
  • 关于python - python队列和多处理队列: how they behave?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/925100/

    10-15 19:56