求解????
Topic source还有改成如下代码就不能得到B和C,难道只能用文中的While True吗
def read(q):
print('Process to read: %s' % os.getpid())
for i in range(q.qsize()):
value=q.get()
print('Get %s from queue...' % value)
应该是进程是交替执行的原因吧
write 的延时应该就是让写入完成 然后才能取的到
用while 的目的就是一直取一直取 写进去就给你取出来 才好实现交替
你可以把延时注释掉 就会发现结果又不一样了 不出意外是写完再取
Process to write: 9108
Put A to queue...
Put B to queue...
Process to read: 14164
Put C to queue...
Get A from queue.
Get B from queue.
Get C from queue.
因为只有A B C 比较短 它一口气就写完了
但是如果你在注释掉延时的情况下把list加长 比如 到 E F G H
你就会发现他先写了几个 然后取了几个 然后又写了几个
然后又取了几个
Process to write: 4344
Put A to queue...
Put B to queue...
Process to read: 17276
Put C to queue...
Get A from queue.
Put d to queue...
Get B from queue.Put e to queue...
Get C from queue.
Get d from queue.
Get e from queue.
如果你非要实现你想的效果 就把输出放在一句里 就不怕被交替了
比如
while True:
value = q.get(True)
print('Get %s from queue. \n%s' % (value,value))
此时输出就是
Process to write: 2988
Put A to queue...
Process to read: 9520
Get A from queue.
A
Put B to queue...
Get B from queue.
B
Put C to queue...
Get C from queue.
C
Put d to queue...
Get d from queue.
d
Put e to queue...
Get e from queue.
e
queue是队列,get()之后就没了,所以你第一次循环get了两次,打印了第二次的 b,第二次循环打印的时候是第四次get,已经没值了
你的第二段代码得不到 b 和 c,应该是一样的,因为你get了,q.qsize就变了,在for的时候这个值有变化,具体什么流程我没测试,不过最好不要在for的时候改变你的for的条件
- 1
楠先森咩
文中的这段代码是什么意思?
如果在下面加一句:
想把写进去的“A”, "B", "C"依次读取并打印出来。但是我只能得到一个"B",为什么?
我该怎么做才能得到“A”, "B", "C"???