我正在尝试将代码更改为更面向对象的格式。在这样做的过程中,我迷失在如何形象化的过程中。多处理发生了什么以及如何解决它。一方面,类应该跟踪跨函数的局部变量的变化,但另一方面,我相信多处理会创建原始实例无法访问的代码副本。我需要找到一种方法来使用多处理在类中操作类,并让父类保留嵌套类中的所有操作值。
简单版本(旧代码):
function runMultProc():
...
dictReports = {}
listReports = ['reportName1.txt', 'reportName2.txt']
tasks = []
pool = multiprocessing.Pool()
for report in listReports:
if report not in dictReports:
dictReports[today][report] = {}
tasks.append(pool.apply_async(worker, args=([report, dictReports[today][report]])))
else:
continue
for task in tasks:
report, currentReportDict = task.get()
dictReports[report] = currentFileDict
function worker(report, currentReportDict):
<Manipulate_reports_dict>
return report, currentReportDict
新代码:
class Transfer():
def __init__(self):
self.masterReportDictionary[<todays_date>] = [reportObj1, reportObj2]
def processReports(self):
self.pool = multiprocessing.Pool()
self.pool.map(processWorker, self.masterReportDictionary[<todays_date>])
self.pool.close()
self.pool.join()
def processWorker(self, report):
# **process and manipulate report, currently no return**
report.name = 'foo'
report.path = '/path/to/report'
class Report():
def init(self):
self.name = ''
self.path = ''
self.errors = {}
self.runTime = ''
self.timeProcessed = ''
self.hashes = {}
self.attempts = 0
我不认为这段代码可以完成我需要它做的事情,即让它并行处理报告列表,并且当processWorker操作每个报告类对象时,存储这些结果。由于我对此很陌生,所以我希望有人可以提供帮助。
两者之间的最大区别是第一个构建字典并返回它。第二个模型不应该真正返回任何东西,我只需要让类完成处理,并且它们应该在其中包含相关信息。 谢谢!