这个示例代码有效(我可以在文件中写一些内容):
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()
Run Code Online (Sandbox Code Playgroud)
而不是这个其他样本:( 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()
Run Code Online (Sandbox Code Playgroud)
这个其他样本没有(我不能在文件中写一些东西):
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()
Run Code Online (Sandbox Code Playgroud)
有人可以解释这些差异吗?和权利?
Tor*_*rek 61
对于你的第二个例子,你已经自己给出了解释--- Queue是一个无法调用的模块.
对于第三个例子:我假设你Queue.Queue一起使用multiprocessing.A Queue.Queue不会在进程之间共享.如果在Queue.Queue进程之前声明了,那么每个进程将收到一个副本,然后该副本独立于其他每个进程.Queue.Queue在开始孩子之前由父母放置的项目将可供每个孩子使用.Queue.Queue启动子项后由父项放置在项目中的项目仅对父项可用.Queue.Queue用于同一进程内不同线程之间的数据交换(使用线程模块).多处理队列用于不同Python 进程之间的数据交换.虽然API看起来很相似(它的设计就是这样),但底层机制却根本不同.
multiprocessing 队列通过酸洗(序列化)对象并通过管道发送它们来交换数据. Queue.Queue 使用在线程和锁/互斥锁之间共享的数据结构以获得正确的行为.Red*_*war 12
被创建为在该模块产生的并发环境threading中工作。
Queue.Queue每个线程共享对它们之间的对象的引用。这里不会发生数据的复制或序列化,并且所有线程都可以访问队列内的相同数据。
被创建为在该模块产生的并行环境multiprocessing中工作。
每个进程都可以访问multiprocessing.Queue其中的对象的副本。队列的内容通过 pickle 序列化在进程之间复制。。