Python Multiprocessing.Pool在一个类中

时间:2017-09-22 18:31:37

标签: python class multiprocessing

我正在尝试将代码更改为更面向对象的格式。在这样做的过程中,我迷失在如何形象化的过程中。多处理发生了什么以及如何解决它。一方面,类应该跟踪跨函数的局部变量的变化,但另一方面,我相信多处理会创建原始实例无法访问的代码副本。我需要找到一种方法来使用多处理在类中操作类,并让父类保留嵌套类中的所有操作值。

简单版本(旧代码):

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操作每个报告类对象时,存储这些结果。由于我对此很陌生,所以我希望有人可以提供帮助。

两者之间的最大区别是第一个构建字典并返回它。第二个模型不应该真正返回任何东西,我只需要让类完成处理,并且它们应该在其中包含相关信息。 谢谢!

0 个答案:

没有答案