Python 2.7.5 - 同时运行多个线程而不会减慢速度

时间:2013-08-26 06:42:46

标签: python multithreading multiplayer

我正在用python创建一个简单的多人游戏。我已经使用python中的默认线程模块拆分了进程。但是我注意到程序仍然以其他线程的速度减慢。我尝试使用多处理模块,但不是所有的对象都可以被腌制。

是否可以使用多处理模块来运行同步进程?

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

您需要分析当其他线程执行其工作时您的程序减速的原因。假设线程正在进行CPU密集型工作,那么减速与全局解释器锁序列化的线程一致。

如果不了解线程正在执行的工作的性质以及必须并行共享的对象,则无法在详细说明中回答。一般来说,您有两个可行的选择:

  1. 通常通过多处理模块使用流程。对象不可选择的典型原因是因为它们包含不可解决的状态,例如闭包,打开文件句柄或其他系统资源。但是pickle允许对象实现像__getstate____reduce__这样的方法来识别对象的状态,使用状态来重建对象。如果你的对象因为它们很大而不可销售,那么你可能需要编写一个C扩展来将它们存储在共享内存或内存映射文件中,并且只选择一个在共享内存中标识它们的键。

    < / LI>
  2. 使用线程,找到解决GIL问题的方法。如果您的计算集中在几个热点,您可以将这些热点移动到C,并在计算期间释放GIL。为此,计算不得引用任何Python对象,即在保持GIL时必须从对象中提取所有数据,并在重新获取GIL后将其存储回Python世界。