【发布时间】:2017-11-29 02:40:26
【问题描述】:
我正在尝试使用多处理,但我不断收到此错误:
AttributeError: Can't get attribute 'processLine' on <module '__main__'
(processLine函数返回word,所以我猜问题出在这里,但我不知道如何解决)
import multiprocessing as mp
pool = mp.Pool(4)
jobs = []
Types =[]
def processLine(line):
line = line.split()
word = line[0].strip()
return word
with open("1.txt", "r", encoding = "utf-8") as f:
for line in f:
word = (jobs.append(pool.apply_async(processLine,(line))))
Types.append(word)
filtered_words=[]
with open("2.txt", "r", encoding = "utf-8") as f:
for line in f:
word = jobs.append(pool.apply_async(processLine,(line)))
if word in Types:
filtered_words = "".join(line)
print(filtered_words)
for job in jobs:
job.get()
pool.close()
这就是我得到的: 进程 ForkPoolWorker-1:
进程 ForkPoolWorker-2:
进程 ForkPoolWorker-3:
进程 ForkPoolWorker-4:
Traceback(最近一次调用最后一次):
文件“/Users/user/anaconda/lib/python3.6/multiprocessing/process.py”,第 249 行,在 _bootstrap 中
self.run()
文件“/Users/user/anaconda/lib/python3.6/multiprocessing/process.py”,第 93 行,运行中
self._target(*self._args, **self._kwargs)
文件“/Users/user/anaconda/lib/python3.6/multiprocessing/pool.py”,第 108 行,在 worker 中
task = get()
文件“/Users/user/anaconda/lib/python3.6/multiprocessing/queues.py”,第 345 行,在 get return _ForkingPickler.loads(res)
AttributeError: Can't get attribute 'processLine' on
Traceback(最近一次调用最后一次):
Traceback(最近一次调用最后一次):
Traceback(最近一次调用最后一次):
文件“/Users/user/anaconda/lib/python3.6/multiprocessing/process.py”,第 249 行,在 _bootstrap 自我运行() 文件“/Users/user/anaconda/lib/python3.6/multiprocessing/process.py”, 第 249 行,在 _bootstrap 中
self.run()
文件“/Users/user/anaconda/lib/python3.6/multiprocessing/process.py”,第 93 行,运行中
self._target(*self._args, **self._kwargs)
文件“/Users/user/anaconda/lib/python3.6/multiprocessing/process.py”,第 93 行,运行中
self._target(*self._args, **self._kwargs)
文件“/Users/user/anaconda/lib/python3.6/multiprocessing/pool.py”,第 108 行,在 worker 中
task = get()
文件“/Users/user/anaconda/lib/python3.6/multiprocessing/pool.py”,第 108 行,在 worker 中 任务 = 获取() 文件“/Users/user/anaconda/lib/python3.6/multiprocessing/queues.py”,第 345 行,在 get 返回 _ForkingPickler.loads(res) _bootstrap 中的文件“/Users/user/anaconda/lib/python3.6/multiprocessing/process.py”,第 249 行 自我运行() 文件“/Users/user/anaconda/lib/python3.6/multiprocessing/queues.py”,第 345 行,在 get 返回 _ForkingPickler.loads(res) 文件“/Users/user/anaconda/lib/python3.6/multiprocessing/process.py”,第 93 行,运行中 self._target(*self._args, **self._kwargs) AttributeError:无法获取属性“processLine” AttributeError:无法获取属性“processLine” 文件“/Users/user/anaconda/lib/python3.6/multiprocessing/pool.py”,第 108 行,在 worker 中 任务 = 获取()
文件“/Users/user/anaconda/lib/python3.6/multiprocessing/queues.py”, 第 345 行,在获取中
return _ForkingPickler.loads(res)
AttributeError: Can't get attribute 'processLine' on
【问题讨论】:
-
如果
(line)需要是一个元组,请执行(line,)。逗号组成一个元组,而不是括号。 -
不,行不必是元组。
-
哪个实际行会引发错误?你能发布完整的堆栈跟踪吗?
-
另外,我无法通过在 Py3.6.2 解释器中运行它来重现您的错误...
-
您在哪个平台(Linux?Windows?)上运行?
标签: python python-3.x multiprocessing python-multiprocessing