用p语言处理Python中不同类的对象

2024-09-30 01:28:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我有6节课

我主要是为每个类创建一个对象

我想并行调用每个对象的eachObject.processFiles()

processFiles方法通过读取对象文件来处理它们,处理数据,并将其保存在持久对象中。每次processFiles调用大约需要5分钟。如果按顺序进行,则主要需要大约30分钟

我现在正在按顺序执行,但我希望在最短的cpu时间内加快6个对象处理其文件的速度。所有的对象都是相互独立的,我认为多线程方式会很有效。但是我以前没有做过多线程。所以我想知道这样做是否安全,以及怎么做。一段代码片段会有所帮助

我怎么能同时做呢

class system(object):
  def __init__(self, leNameList):
    self.files = fileNameList

  def processFiles(self):
    self.feeds= self.readFiles()
    self.processFeeds()

class A(system):
  def processFeeds(self):
    """ process the feed 
         in A way """

class B(system):
  def processFeeds(self):
    """ process the feed 
         in B way """

def main():
  aObj = A(fileList)
  bObj = B(fileList2)
  aObj.processFiles()
  bObj.processFiles() 

Tags: 文件the对象inself顺序deffeed
1条回答
网友
1楼 · 发布于 2024-09-30 01:28:27

使用^{}模块

import multiprocessing

class system(object):
  def __init__(self, fileNameList):
    self.files = fileNameList

  def processFiles(self):
    # self.feeds= self.readFiles()
    return self.processFeeds()

class A(system):
  def processFeeds(self):
    return ["A feed", "example data"] + self.files

class B(system):
  def processFeeds(self):
    return ["B feed", "hello world"] + self.files

def process_file_task(processor):
    return processor.processFiles()

def main():
  aObj = A(["a"])
  bObj = B(["b"])
  data = multiprocessing.Pool().map(process_file_task, [aObj, bObj])
  print(data)

在这里,我用示例数据填充了您的代码,以便您可以开箱测试这个解决方案,但其要点是:

  • 返回生成的数据,而不是更改全局变量或对象状态
  • 使用multiprocessing.Pool().map执行不同进程中的函数,并按顺序返回每个结果

这样做的缺点是multiprocessing有时使用起来有点挑剔,而且您必须确保通过流程边界的所有内容都可以被pickle处理


还有一件事要检查你的代码是文件列表。如果它们有许多共同的文件,则应该将文件读取过程分开,并确保不必读取同一个文件两次

相关问题 更多 >

    热门问题