Самый простой способ - использовать модуль multiprocessing
:
class FindIntersectionsWrapper(object):
def __init__(self, ent, collidable):
self.ent = ent
self.collidable = collidable
def __call__(self, dims):
line1, line2 = dims
return find_intersections(
line1 + self.ent.position, self.ent.velocity,
self.ent.acceleration, line2 + self.collidable.position,
self.collidable.velocity, self.collidable.acceleration,
self.ent, self.collidable)
def entity_intersections(ent, collidable):
find_inter = FindIntersectionsWrapper(ent, collidable)
pool = multiprocessing.Pool()
return pool.map(find_inter, product(ent.shape, collidable.shape))
Вспомогательная функция find_intersections_wrapper()
необходима, поскольку Pool.map()
ожидает функцию с одним аргументом.
Возможно, вы захотите переместить создание pool
из entity_intersections()
, чтобы накладные расходы генерировались только один раз.
Редактировать : Использовать класс вместо замыкания, поскольку передаваемый в Pool.map()
вызываемый объект должен быть доступен для выбора в Windows.