下面是一些示例代码,用于读取文件并将每一行相加。它应该将 0 到 20 之间的所有数字相加。然而,我总是得到一个结果0
.
可以看到中间计算成功了,为什么最后的结果是0
?
有一个更好的方法吗?我试图对更大、更复杂的输入文件进行更多计算,并存储一些统计数据。
import multiprocessing
import StringIO
class Total():
def __init__(self):
self.total = 0
def add(self, number):
self.total += int(number)
def __str__(self):
return str(self.total)
total = Total()
def f(input):
total.add(input)
# Create mock file
mock_file = StringIO.StringIO()
for i in range(20):
mock_file.write("{}\n".format(i))
mock_file.seek(0)
# Compute
pool = multiprocessing.Pool(processes=4)
pool.map(f, mock_file)
print total
# Cleanup
mock_file.close()
您可以使用以下方法来完成此操作共享内存 with subprocess.Value
,只需改变你的Total
类如下:
class Total():
def __init__(self):
self.total = multiprocessing.Value('d', 0)
def add(self, number):
self.total.value += int(number)
def __str__(self):
return str(self.total.value)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)