“'Module'对象没有属性…”多处理E

2024-10-02 18:24:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我用python2.7运行windows7。在

我试图用multiprocessing模块运行基本的多处理代码来测试可用性。我见过类似的错误herehere,但下面的代码没有这些问题。在

当我从Anaconda命令提示符或Spyder IDE Python控制台运行以下代码(或使用multiprocessing模块的任何代码)时,我收到以下错误消息。在

当我在Spyder IDE iPython控制台中运行代码时,我没有收到错误,但程序从未完成,从我的Windows Task Manager我可以看到python没有使用任何CPU,即使Spyder显示它仍在运行(控制台上方的红色方块是红色的)。在

import multiprocessing

def funSquare(num):
    return num ** 2

if __name__ == '__main__':
    pool = multiprocessing.Pool()
    results = pool.map(funSquare, range(10))
    print(results)

Process PoolWorker-1:
Traceback (most recent call last):
  File "C:\Anaconda\lib\multiprocessing\process.py", line 258, in _bootstrap
    self.run()
  File "C:\Anaconda\lib\multiprocessing\process.py", line 114, in run
    self._target(*self._args, **self._kwargs)
  File "C:\Anaconda\lib\multiprocessing\pool.py", line 102, in worker
    task = get()
  File "C:\Anaconda\lib\multiprocessing\queues.py", line 376, in get
    return recv()
AttributeError: 'module' object has no attribute 'funSquare'
Process PoolWorker-2:
Process PoolWorker-5:
Traceback (most recent call last):
  File "C:\Anaconda\lib\multiprocessing\process.py", line 258, in _bootstrap
    self.run()
  File "C:\Anaconda\lib\multiprocessing\process.py", line 114, in run
    self._target(*self._args, **self._kwargs)
  File "C:\Anaconda\lib\multiprocessing\pool.py", line 102, in worker
    task = get()
  File "C:\Anaconda\lib\multiprocessing\queues.py", line 376, in get
    return recv()
AttributeError: 'module' object has no attribute 'funSquare'
Traceback (most recent call last):
  File "C:\Anaconda\lib\multiprocessing\process.py", line 258, in _bootstrap
    self.run()
  File "C:\Anaconda\lib\multiprocessing\process.py", line 114, in run
    self._target(*self._args, **self._kwargs)
  File "C:\Anaconda\lib\multiprocessing\pool.py", line 102, in worker
    task = get()
  File "C:\Anaconda\lib\multiprocessing\queues.py", line 376, in get
    return recv()
AttributeError: 'module' object has no attribute 'funSquare'
Process PoolWorker-4:
Traceback (most recent call last):
  File "C:\Anaconda\lib\multiprocessing\process.py", line 258, in _bootstrap
    self.run()
  File "C:\Anaconda\lib\multiprocessing\process.py", line 114, in run
    self._target(*self._args, **self._kwargs)
  File "C:\Anaconda\lib\multiprocessing\pool.py", line 102, in worker
    task = get()
  File "C:\Anaconda\lib\multiprocessing\queues.py", line 376, in get
    return recv()
AttributeError: 'module' object has no attribute 'funSquare'
Process PoolWorker-3:
Traceback (most recent call last):
  File "C:\Anaconda\lib\multiprocessing\process.py", line 258, in _bootstrap
    self.run()
  File "C:\Anaconda\lib\multiprocessing\process.py", line 114, in run
    self._target(*self._args, **self._kwargs)
  File "C:\Anaconda\lib\multiprocessing\pool.py", line 102, in worker
    task = get()
  File "C:\Anaconda\lib\multiprocessing\queues.py", line 376, in get
    return recv()
AttributeError: 'module' object has no attribute 'funSquare'
Process PoolWorker-6:
Traceback (most recent call last):
  File "C:\Anaconda\lib\multiprocessing\process.py", line 258, in _bootstrap
    self.run()
  File "C:\Anaconda\lib\multiprocessing\process.py", line 114, in run
    self._target(*self._args, **self._kwargs)
  File "C:\Anaconda\lib\multiprocessing\pool.py", line 102, in worker
    task = get()
  File "C:\Anaconda\lib\multiprocessing\queues.py", line 376, in get
    return recv()
AttributeError: 'module' object has no attribute 'funSquare'
Process PoolWorker-8:
Process PoolWorker-7:
Traceback (most recent call last):
  File "C:\Anaconda\lib\multiprocessing\process.py", line 258, in _bootstrap
    self.run()
  File "C:\Anaconda\lib\multiprocessing\process.py", line 114, in run
    self._target(*self._args, **self._kwargs)
  File "C:\Anaconda\lib\multiprocessing\pool.py", line 102, in worker
    task = get()
  File "C:\Anaconda\lib\multiprocessing\queues.py", line 376, in get
    return recv()
AttributeError: 'module' object has no attribute 'funSquare'
Traceback (most recent call last):
  File "C:\Anaconda\lib\multiprocessing\process.py", line 258, in _bootstrap
    self.run()
  File "C:\Anaconda\lib\multiprocessing\process.py", line 114, in run
    self._target(*self._args, **self._kwargs)
  File "C:\Anaconda\lib\multiprocessing\pool.py", line 102, in worker
    task = get()
  File "C:\Anaconda\lib\multiprocessing\queues.py", line 376, in get
    return recv()
AttributeError: 'module' object has no attribute 'funSquare'
Process PoolWorker-9:
Traceback (most recent call last):
  File "C:\Anaconda\lib\multiprocessing\process.py", line 258, in _bootstrap
    self.run()
  File "C:\Anaconda\lib\multiprocessing\process.py", line 114, in run
    self._target(*self._args, **self._kwargs)
  File "C:\Anaconda\lib\multiprocessing\pool.py", line 102, in worker
    task = get()
  File "C:\Anaconda\lib\multiprocessing\queues.py", line 376, in get
    return recv()
AttributeError: 'module' object has no attribute 'funSquare'
Process PoolWorker-10:
Traceback (most recent call last):
  File "C:\Anaconda\lib\multiprocessing\process.py", line 258, in _bootstrap
    self.run()
  File "C:\Anaconda\lib\multiprocessing\process.py", line 114, in run
    self._target(*self._args, **self._kwargs)
  File "C:\Anaconda\lib\multiprocessing\pool.py", line 102, in worker
    task = get()
  File "C:\Anaconda\lib\multiprocessing\queues.py", line 376, in get
    return recv()
AttributeError: 'module' object has no attribute 'funSquare'

有人能告诉我怎么解决这个问题吗?如果需要更多的细节,请告诉我。谢谢!在


Tags: runinpyselfgetreturnlibline
1条回答
网友
1楼 · 发布于 2024-10-02 18:24:01

我运行的是python3,IDE是anaconda(windows)中的spyder,所以我也得到了错误。但是经过一整天的搜索,我找到了一些解决方案,它帮助我在我的windows机器上运行同样的代码。这个网站帮助我找到了解决方案:

http://python.6.x6.nabble.com/Multiprocessing-Pool-woes-td5047050.html

因为我使用的是python 3,所以我对程序做了如下更改:

from types import FunctionType
import marshal

def _applicable(*args, **kwargs):
  name = kwargs['__pw_name']
  code = marshal.loads(kwargs['__pw_code'])
  gbls = globals() #gbls = marshal.loads(kwargs['__pw_gbls'])
  defs = marshal.loads(kwargs['__pw_defs'])
  clsr = marshal.loads(kwargs['__pw_clsr'])
  fdct = marshal.loads(kwargs['__pw_fdct'])
  func = FunctionType(code, gbls, name, defs, clsr)
  func.fdct = fdct
  del kwargs['__pw_name']
  del kwargs['__pw_code']
  del kwargs['__pw_defs']
  del kwargs['__pw_clsr']
  del kwargs['__pw_fdct']
  return func(*args, **kwargs)

def make_applicable(f, *args, **kwargs):
  if not isinstance(f, FunctionType): raise ValueError('argument must be a function')
  kwargs['__pw_name'] = f.__name__  # edited
  kwargs['__pw_code'] = marshal.dumps(f.__code__)   # edited
  kwargs['__pw_defs'] = marshal.dumps(f.__defaults__)  # edited
  kwargs['__pw_clsr'] = marshal.dumps(f.__closure__)  # edited
  kwargs['__pw_fdct'] = marshal.dumps(f.__dict__)   # edited
  return _applicable, args, kwargs

def _mappable(x):
  x,name,code,defs,clsr,fdct = x
  code = marshal.loads(code)
  gbls = globals() #gbls = marshal.loads(gbls)
  defs = marshal.loads(defs)
  clsr = marshal.loads(clsr)
  fdct = marshal.loads(fdct)
  func = FunctionType(code, gbls, name, defs, clsr)
  func.fdct = fdct
  return func(x)

def make_mappable(f, iterable):
  if not isinstance(f, FunctionType): raise ValueError('argument must be a function')
  name = f.__name__    # edited
  code = marshal.dumps(f.__code__)   # edited
  defs = marshal.dumps(f.__defaults__)  # edited
  clsr = marshal.dumps(f.__closure__)  # edited
  fdct = marshal.dumps(f.__dict__)  # edited
  return _mappable, ((i,name,code,defs,clsr,fdct) for i in iterable)

此功能完成后,上面的问题代码也改成这样:

^{pr2}$

我得到的输出是:

[1, 8, 27, 64, 125, 216]

我想这篇文章可能对一些windows用户有用。在

相关问题 更多 >