python在import多进程的Queue类时产生的一个问题

python中导入包时会出现的一个问题

我在尝试使用python的多进程模块编程的时候,发现在导入Queue这个包的时候始终报错

情况是这样的:

文件夹结构如下:

multi
	queue.py

queue.py的内容为:

from multiprocessing import Process
from multiprocessing import Queue
#from queue import Queue
import os,time,random

#写数据进程的代码
def proc_write(q,urls):
    print('Process(%s) is writing...' % os.getpid())
    for url in urls:
        q.put(url)
        print('Put %s to queue...' % url)
        time.sleep(random.random())

#读数据进程执行的代码
def proc_read(q):
    print('Process(%s) is reading...' % os.getpid())
    while True:

        url=q.get(True)
        print('Get %s from queue.' % url)

if __name__=='__main__':
    #父进程创建Queue,并传递给每个子进程
    q=Queue()
    proc_writer1=Process(target=proc_write,args=(q,['url_1','url_2','url_3']))
    proc_writer2=Process(target=proc_write,args=(q,['url_4','url_5','url_6']))
    proc_reader=Process(target=proc_read,args=(q,))
    proc_writer1.start()
    proc_writer2.start()
    proc_reader.start()
    proc_writer1.join()
    proc_writer2.join()
    proc_reader.terminate()

但是我一运行,问题就出来了:

Traceback (most recent call last):
  File "queue2.py", line 24, in <module>
    q=Queue()
  File "/usr/lib/python3.7/multiprocessing/context.py", line 101, in Queue
    from .queues import Queue
  File "/usr/lib/python3.7/multiprocessing/queues.py", line 20, in <module>
    from queue import Empty, Full
  File "/home/view/code/python3/muti/queue.py", line 23
    1 q=Queue()

(这里我又创建了一个queue2.py)
后来我阅读了这几个模块的源码,终于发现了问题所在,问题的关键就在于在multiprocessing这个包内的queues.py模块下的有一段代码:

from queue import Empty, Full

这里面的queue应该是系统模块queue.py文件
但是在这里由于python搜索包的机制是优先搜索本地文件,因此我自己创建的包queue.py被在queues.py初始化时导入而出了错
所以解决办法就是重命名queue.py
换一个别的名字

解决办法

重命名本地文件中的queue.py为别的名字。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值