私のコードは(numbaとマルチプロセッシングで)改善しようとしていますが、私の関数には多くの引数があるので、それを得ることはできません。私はすでに他の機能(下記参照)でそれを単純化している多くの入力を伴うforループでの実装
...各エージェント(クラスのインスタンス)として
は、これらのアクションのために互いに独立して、私はPool
でfor
を交換したいと思います。
だから私は、私が電話して渡す薬
from multiprocessing import Pool
p = Pool(4)
p.map(pooling, list(agents))
のリストをしかし、私はプーリング機能が必要となるすべての引数を追加しないところでしょう大きな機能pooling()
になるだろうか?
それがあるとして:
def check_demographics(month, my_agents, families, firms, year, mortality_men, mortality_women, fertility, state_id):
dummy = list(my_agents)
d = str(state_id.iloc[0])
# Place where I would like to replace the LOOP. All below would be a function
for agent in dummy:
if agent.get_region_id()[:2] == d:
# Brithday
if month % 12 == agent.month - 1:
agent.update_age()
# Mortality probability
if agent.get_gender() == 'Male':
prob = mortality_men[mortality_men['age'] == agent.get_age()][year].iloc[0]
# When gender is Female
else:
# Extract specific agent data to calculate mortality 'Female'
prob = mortality_women[mortality_women['age'] == agent.get_age()][year].iloc[0]
# Give birth decision
age = agent.get_age()
if 14 < age < 50:
pregnant(agent, fertility, year, families, my_agents)
# Mortality procedures
if fixed_seed.random() < prob:
mortal(my_agents, my_graveyard, families, agent, firms)
それは私のプログラムの中で最も時間のかかる機能です。 @jit
はあまり役に立ちません。
おかげでたくさん
注:グローバル変数またはパラメータ「my_graveyard」はありません。 –
本当にありがとうございます。 –