此示例代码有效(我可以在文件中编写一些内容):
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()
有人能解释一下区别吗?有权这么做吗?
对于第二个示例,您已经自己给出了解释---
Queue
是一个模块,不能调用它。对于第三个示例:我假设您将
Queue.Queue
与multiprocessing
一起使用。进程之间不会共享Queue.Queue
。如果Queue.Queue
是在进程之前声明的,那么每个进程都将收到它的一个副本,该副本将独立于其他每个进程。在启动子项之前,父项放在Queue.Queue
中的项将对每个子项可用。启动子项后父项放在Queue.Queue
中的项将仅对父项可用。Queue.Queue
用于同一进程内不同线程之间的数据交换(使用threading模块)。多处理队列用于不同Python进程之间的数据交换。虽然API看起来很相似(它是这样设计的),但底层机制却有本质的不同。multiprocessing
队列通过挑选(序列化)对象并通过管道发送它们来交换数据。Queue.Queue
使用在线程和锁/互斥体之间共享的数据结构,以获得正确的行为。相关问题 更多 >
编程相关推荐