我会创建一个Game
继承自的类threading.Thread
,因此它的行为类似于线程。Game
类构造函数接受两个玩家对象和number
游戏。
number
需要通过共享变量将游戏结果返回到主程序resultList
(列表在 Python 中是线程安全的)。resultList
是一个列表列表,每个实例根据其Game
将结果放入相应的单元格中。resultList
number
run()
每个Game()
实例的方法都在不同的线程中执行,因此所有游戏都是并行进行的。
import threading
numOfGames = 10
resultList = [[] for x in xrange(numOfGames)]
class Game(threading.Thread):
def __init__(self, player1, player2, number):
threading.Thread.__init__(self)
self.number = number
self.player1 = player1
self.player2 = player2
def run(self):
#Your game algorithm between self.player1 and self.player2 is here
#Put game result into shared list
resultList[self.number] = <result>
要使用Game
该类,您可以执行以下操作:
#Create instances of the Game() class, pass your Player() objects
#You can do the step in loop
game0 = Game(<PlayerObj>,<PlayerObj>,0)
game1 = Game(<PlayerObj>,<PlayerObj>,1)
#Start execution of Game.run() methods of all Game() objects in separate threads
#You can do the step in loop
game0.start()
game1.start()
#Wait until all Game.run() methods are executed = all threads are finished
#You can do the step in loop
game0.join()
game1.join()
#In the shared list you have corresponding return values,
#whatever they are in your case [[result of Game 0],[result of Game 1],[]...]
print resultList
PS:我不建议使用多处理,因为创建进程会产生大量开销(需要分配堆栈等)。在您的情况下,多处理就足够了,因为您的应用程序不需要内存隔离。