Python3.4中的多处理是否已被破坏?

Python3.4中的多处理是否已被破坏?,python,python-3.x,multiprocessing,importerror,python-3.4,Python,Python 3.x,Multiprocessing,Importerror,Python 3.4,我正在尝试使用Python3中的多处理模块。然而,每次我尝试建立一个池时,我都会得到以下回溯 Traceback (most recent call last): File "testmp.py", line 7, in <module> with Pool(5) as p: File "/usr/lib/python3.4/multiprocessing/context.py", line 118, in Pool context=self.get_cont

我正在尝试使用Python3中的多处理模块。然而,每次我尝试建立一个池时,我都会得到以下回溯

Traceback (most recent call last):
  File "testmp.py", line 7, in <module>
    with Pool(5) as p:
  File "/usr/lib/python3.4/multiprocessing/context.py", line 118, in Pool
    context=self.get_context())
  File "/usr/lib/python3.4/multiprocessing/pool.py", line 150, in __init__
    self._setup_queues()
  File "/usr/lib/python3.4/multiprocessing/pool.py", line 243, in _setup_queues
    self._inqueue = self._ctx.SimpleQueue()
  File "/usr/lib/python3.4/multiprocessing/context.py", line 110, in SimpleQueue
    from .queues import SimpleQueue
  File "/usr/lib/python3.4/multiprocessing/queues.py", line 20, in <module>
    from queue import Empty, Full
ImportError: cannot import name 'Empty'
(来源:)

我的问题:这是Python 3.4中的一个bug吗?还是我做错了什么?等价的代码在Python 2.7中工作。

您有一个名为
队列的本地模块
;它干扰了系统

删除或重命名它,您的代码将再次工作:

stackoverflow-3.4 mj$ cat test.py 
from multiprocessing import Pool

def f(x):
    return x*x

if __name__ == '__main__':
    with Pool(5) as p:
        print(p.map(f, [1, 2, 3]))

stackoverflow-3.4 mj$ touch queue.py
stackoverflow-3.4 mj$ bin/python test.py 
Traceback (most recent call last):
  File "test.py", line 7, in <module>
    with Pool(5) as p:
  File "/.../python3.4/multiprocessing/context.py", line 118, in Pool
    context=self.get_context())
  File "/.../python3.4/multiprocessing/pool.py", line 150, in __init__
    self._setup_queues()
  File "/.../python3.4/multiprocessing/pool.py", line 243, in _setup_queues
    self._inqueue = self._ctx.SimpleQueue()
  File "/.../lib/python3.4/multiprocessing/context.py", line 110, in SimpleQueue
    from .queues import SimpleQueue
  File "/.../lib/python3.4/multiprocessing/queues.py", line 20, in <module>
    from queue import Empty, Full
ImportError: cannot import name 'Empty'
stackoverflow-3.4 mj$ rm queue.py
stackoverflow-3.4 mj$ bin/python test.py 
[1, 4, 9]
stackoverflow-3.4 mj$cat test.py
来自多处理导入池
def f(x):
返回x*x
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
将池(5)作为p:
打印(p.map(f[1,2,3]))
stackoverflow-3.4兆焦耳$touch queue.py
stackoverflow-3.4 mj$bin/python test.py
回溯(最近一次呼叫最后一次):
文件“test.py”,第7行,在
将池(5)作为p:
文件“/…/python3.4/multiprocessing/context.py”,第118行,在池中
context=self.get\u context())
文件“/…/python3.4/multiprocessing/pool.py”,第150行,在__
self.\u设置\u队列()
文件“/…/python3.4/multiprocessing/pool.py”,第243行,在设置队列中
self.\u inqueue=self.\u ctx.SimpleQueue()
SimpleQueue中的文件“/…/lib/python3.4/multiprocessing/context.py”,第110行
从队列导入SimpleQueue
文件“/…/lib/python3.4/multiprocessing/queues.py”,第20行,在
从队列导入空、满
ImportError:无法导入名称“空”
stackoverflow-3.4兆焦耳$rm queue.py
stackoverflow-3.4 mj$bin/python test.py
[1, 4, 9]
如果您很难找到它,请运行
python3-c'导入队列;打印(队列。_u文件)

您有一个名为
队列的本地模块
;它干扰了系统

删除或重命名它,您的代码将再次工作:

stackoverflow-3.4 mj$ cat test.py 
from multiprocessing import Pool

def f(x):
    return x*x

if __name__ == '__main__':
    with Pool(5) as p:
        print(p.map(f, [1, 2, 3]))

stackoverflow-3.4 mj$ touch queue.py
stackoverflow-3.4 mj$ bin/python test.py 
Traceback (most recent call last):
  File "test.py", line 7, in <module>
    with Pool(5) as p:
  File "/.../python3.4/multiprocessing/context.py", line 118, in Pool
    context=self.get_context())
  File "/.../python3.4/multiprocessing/pool.py", line 150, in __init__
    self._setup_queues()
  File "/.../python3.4/multiprocessing/pool.py", line 243, in _setup_queues
    self._inqueue = self._ctx.SimpleQueue()
  File "/.../lib/python3.4/multiprocessing/context.py", line 110, in SimpleQueue
    from .queues import SimpleQueue
  File "/.../lib/python3.4/multiprocessing/queues.py", line 20, in <module>
    from queue import Empty, Full
ImportError: cannot import name 'Empty'
stackoverflow-3.4 mj$ rm queue.py
stackoverflow-3.4 mj$ bin/python test.py 
[1, 4, 9]
stackoverflow-3.4 mj$cat test.py
来自多处理导入池
def f(x):
返回x*x
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
将池(5)作为p:
打印(p.map(f[1,2,3]))
stackoverflow-3.4兆焦耳$touch queue.py
stackoverflow-3.4 mj$bin/python test.py
回溯(最近一次呼叫最后一次):
文件“test.py”,第7行,在
将池(5)作为p:
文件“/…/python3.4/multiprocessing/context.py”,第118行,在池中
context=self.get\u context())
文件“/…/python3.4/multiprocessing/pool.py”,第150行,在__
self.\u设置\u队列()
文件“/…/python3.4/multiprocessing/pool.py”,第243行,在设置队列中
self.\u inqueue=self.\u ctx.SimpleQueue()
SimpleQueue中的文件“/…/lib/python3.4/multiprocessing/context.py”,第110行
从队列导入SimpleQueue
文件“/…/lib/python3.4/multiprocessing/queues.py”,第20行,在
从队列导入空、满
ImportError:无法导入名称“空”
stackoverflow-3.4兆焦耳$rm queue.py
stackoverflow-3.4 mj$bin/python test.py
[1, 4, 9]

如果您很难找到它,请运行
python3-c'导入队列;打印(队列._u文件_uu)

你这边的bug/error概率>>python中的bug你那边的bug/error概率>>python中的bug你是对的。我在我的scratch目录中工作,实际上,我有一个很久以前写的旧队列。我现在觉得自己很笨。只要你允许,我会尽快接受你的回答。你说得对。我在我的scratch目录中工作,实际上,我有一个很久以前写的旧队列。我现在觉得自己很笨。只要你允许,我会尽快接受你的答复。