python队列和多处理队列:它们的行为如何?

2024-05-21 09:14:24 发布

您现在位置: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()

有人能解释一下区别吗?有权这么做吗?


Tags: importselfcmdlog示例helloworldqueue
1条回答
网友
1楼 · 发布于 2024-05-21 09:14:24

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

对于第三个示例:我假设您将Queue.Queuemultiprocessing一起使用。进程之间不会共享Queue.Queue。如果Queue.Queue是在进程之前声明的,那么每个进程都将收到它的一个副本,该副本将独立于其他每个进程。在启动子项之前,父项放在Queue.Queue中的项将对每个子项可用。启动子项后父项放在Queue.Queue中的项将仅对父项可用。Queue.Queue用于同一进程内不同线程之间的数据交换(使用threading模块)。多处理队列用于不同Python进程之间的数据交换。虽然API看起来很相似(它是这样设计的),但底层机制却有本质的不同。

  • multiprocessing队列通过挑选(序列化)对象并通过管道发送它们来交换数据。
  • Queue.Queue使用在线程和锁/互斥体之间共享的数据结构,以获得正确的行为。

相关问题 更多 >