Discuss / Python / 最后一个Queue通信的出错

最后一个Queue通信的出错

Topic source

JoyDamn

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

按照例子把代码敲了一遍,出错,怀疑自己打字打错了,直接复制运行也是遇到同样的错误代码如下:

import multiprocessing,os,time,random
def write(q):
    print('Process to write {0}'.format(os.getpid()))
    for value in ['A','B','C']:
        print('Put {0} to queue..'.format(value))
        q.put(value)
        time.sleep(random.random())
def read(q):
    print('Process to read {0}'.format(os.getpid()))
    while True:
        value=q.get(True)
        print('Get {0} from queue'.format(value))
if __name__=='__main__':
    q=multiprocessing.Queue()
    pw=multiprocessing.Process(target=write,args=(q,))
    pr=multiprocessing.Process(target=read,args=(q,))
    pw.start()
    pr.start()
    pw.join()
    pr.terminate()

错误如下:

Traceback (most recent call last):
  File "C:\Users\focus\Desktop\python demos\queue.py", line 14, in <module>
    q=multiprocessing.Queue()
  File "C:\Program Files (x86)\python\lib\multiprocessing\context.py", line 100, in Queue
    from .queues import Queue
  File "C:\Program Files (x86)\python\lib\multiprocessing\queues.py", line 20, in <module>
    from queue import Empty, Full
ImportError: cannot import name 'Empty'

并且也是只能在cmd中运行才会得到这个错误,直接ctrl+F5的话,程序会卡一阵,然后弹出错误框,显示 IDLE's subprocess didn't make connection.Either IDLE can't start a subprocess or persional firewall software is blocking the connection. 我并没有使用此类防火墙软件不知道问题出在哪

王珺飞MCFC

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

试试把你的文件名从queue.py改成别的,比如do_queue.py。

File "C:\Users\focus\Desktop\python demos\queue.py", line 14, in <module> q=multiprocessing.Queue() File "C:\Program Files (x86)\python\lib\multiprocessing\context.py", line 100, in Queue from .queues import Queue File "C:\Program Files (x86)\python\lib\multiprocessing\queues.py", line 20, in <module> from queue import Empty, Full

从报的第三个错误可以看出程序是想引用queue模块的Empty类,但是因为path的原因,程序会首先从工作目录寻找queue模块,所以先找到的是你自己写的模块,而不是python库的。


  • 1

Reply