Discuss / Python / 求解????

求解????

Topic source

楠先森咩

#1 Created at ... [Delete] [Delete and Lock User]

文中的这段代码是什么意思?

 while True:
        value = q.get(True)
        print('Get %s from queue.' % value)

如果在下面加一句:

print(q.get())

想把写进去的“A”, "B", "C"依次读取并打印出来。但是我只能得到一个"B",为什么?

Process to write: 25892
Put A to queue...
Process to read: 28412
Get A from queue.
Put B to queue...
B
Put C to queue...
Get C from queue.

我该怎么做才能得到“A”, "B", "C"???

楠先森咩

#2 Created at ... [Delete] [Delete and Lock User]

还有改成如下代码就不能得到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

Reply