此示例代码有效(我可以在文件中写一些东西):
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.Queue
与multiprocessing
一起使用。 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/