Python 用map调用类方法
在一个名为“self.plane”的列表中,我有几个名为Particle的类的实例,我想同时更新这些实例Python 用map调用类方法,python,multithreading,Python,Multithreading,在一个名为“self.plane”的列表中,我有几个名为Particle的类的实例,我想同时更新这些实例 from multiprocessing import Process, Pool from timeit import default_timer as current_time class Particle: def __init__(self, X_position, Y_position, X_velocity=0 ,Y_velocity=0, mass=600):
from multiprocessing import Process, Pool
from timeit import default_timer as current_time
class Particle:
def __init__(self, X_position, Y_position, X_velocity=0 ,Y_velocity=0, mass=600):
self.mass = mass
self.velocity = {'x':X_velocity,'y':Y_velocity}
self.position = {'x':X_position,'y':Y_position}
self.time_of_last_update = {'x':current_time(),'y':current_time()}
def update(self):
for axis in self.position:
# Calculate time since update was last run
elapsed_time = current_time() - self.time_of_last_update[axis]
# Calculate acceleration
# acceleration = force[axis] / self.mass
acceleration = -1
# Calculate velocity
self.velocity[axis] = self.velocity[axis] + ( acceleration * elapsed_time )
# Change position if needed
if (elapsed_time >= 1 / abs( self.velocity[axis] )):
# Calculate new postion
self.position[axis] = self.position[axis] + int( elapsed_time * self.velocity[axis] )
print(self.position)
# Reset the timer
self.time_of_last_update[axis] = current_time()
map函数似乎是实现这一点的最简单方法
我想我可以让Particle.update()
在迭代self.plane
时接收它的self
参数
workers = Pool(processes=4)
workers.map(Particle.update(), self.plane)
但是,当我运行此操作时,我得到
TypeError:update()缺少1个必需的位置参数:“self”
,这是因为需要使用您的值创建对象粒子=粒子(X_position=X_pos,Y_position=Y_vel,X_velocity=X_vel,Y_velocity=0,mass=600)的实例,然后,一旦有了实例粒子,您可以调用particle.update(),因为您需要使用您的值创建对象particle=particle(X_position=X_pos,Y_position=Y_vel,X_velocity=X_vel,Y_velocity=0,mass=600)的实例,然后,一旦有了实例particle,就可以调用particle.update()