python - 在 python 多处理中更新复杂对象
问题描述
我想计算一个使用互联网的大量 io-bond 任务,然后将结果保存在二维数组中,在单进程模式下需要很多天才能完成。
我通过在每个进程中更新一行来使其成为多处理器。
class MatrixData:
def __init__(self, size):
self.size = size
self.dist_matrix = [[0.0] * size] * size
self.last_not_given_row = 0
self.last_save = 0
self.resolved_list = mp.Array('b', [False] * size)
def save_row(self, row_index, data, lock):
lock.acquire()
try:
print('lock')
self.last_save= self.last_save + 1
if self.last_save % 2 == 0:
self.save_file()
self.resolved_list[row_index] = True
for i in range(self.size):
self.dist_matrix[row_index][i] = data[i]
finally:
print('unlock')
lock.release()
我使用其他一些参数,例如last_save
在短时间内将其保存到文件中。
我使用锁来确保进程安全,但是当我启动一个进程时,它会产生新的空间和损坏的数据。
lock = mp.Lock()
for i in range(12):
p = mp.Process(target=worker, args=(data_calculator, MatrixData_obj))
p.start()
plist.append(p)
for p in plist:
p.join()
解决方案
推荐阅读
- ios - 如何使数据在 SwiftUI 中持久化?
- java - 现有注释的 AspectJ 表达式,注释之后但方法执行之前的切入点
- php - 未找到 Sendgrid 附件资源
- django - 删除和修改用户的评论
- r - 指定 geom_image 的大小导致它每次都变得太大?
- django - 在视图 django admin 中未在 POST 请求中获取任何数据
- pandas - 如何从 Pandas 的时间序列中删除重复样本?
- azure-sql-database - 将 Azure SQL 数据库迁移到无服务器的任何问题?
- javascript - 为什么两种情况的输出相同?
- python-3.x - 关于论文“引导随机游走”权重函数实现的问题