0

我在模块多处理中遇到了一个Python问题。 基本上,我做了一个游戏(用tkinter作为图形),其中我有一个类游戏和几个类(entites),都有一个更新(自我)方法。 所以这是一个有点像:Python - 类与多处理的集成

class Game: 
  __init__(self, etc...): 
    self.entities = [] 
  gameloop(self): 
     for entity in self.entities: 
       entity.update 

class EntityExample: 
  __init__(self, game, etc...): 
    self.game = game 
  update(self): 
    #stuff 

然后我做的:

game = Game() 
game.entities.append(EntityExample()) 
game.gameloop() 

所以,我想,对代码进行优化,做这样的事情:

进口多处理

class Game: 
  __init__(self, etc...): 
    self.entities = [] 
    self.threads = [] 
    self.lock = multiprocessing.Lock() 
  gameloop(self): 
     for entity in self.entities: 
       entity.update 

class EntityExample: 
  __init__(self, game, etc...): 
    self.game = game 
  update(self): 
    self.game.lock.acquire() 
    #stuff 
    self.game.lock.release() 

而且在gameloop:

for entity in entities: 
  t = multiprocessing.Process(target=entity.update) 
  t.start() 
  t.join 
  self.threads.append(t) 

的目标是在同一时间,以提高性能上做不同的内核的计算,但它并不可悲工作。 我还要求在IDLE中杀死程序:“程序仍在运行,你想杀死它吗?”。

由于提前,

Talesseed

附: :班级不可采

P.P.S. :我读过创建一个新的Process将文件内的代码复制到一个新的线程,这可能是一个问题,因为我的代码长达1600行。

+0

为什么所有的代码都以连字符开头? –

+0

@BryanOakley糟糕,我会删除那 – Talesseed

+0

'__init__',gameloop或更新已被声明为函数,并且update缺少自己,因此不是EntityExample的一部分 –

回答

0

我发现了一些有趣的东西。显然,通过控制台运行它可以工作。但是我做了一些测试,多线程版本实际上比单线程版本慢。我没有线索:/

编辑:没关系,它的工作现在,我的坏。