Ich habe versucht, meinen Code zu verbessern (mit Numba und Multiprocessing), aber ich kann es nicht ganz bekommen, weil meine Funktion viele Argumente hat.Implementierung von Pool auf einer for-Schleife mit vielen Eingaben
ich es bereits mit anderen Funktionen vereinfacht haben (siehe unten) ...
Da jeder Agent (eine Klasseninstanz) unabhängig voneinander für diese Aktionen, würde Ich mag die for
mit Pool
ersetzen.
So würde ich eine große Funktion erhalten pooling()
, die ich nennen würde und übergeben Sie die Liste der Agenten
from multiprocessing import Pool
p = Pool(4)
p.map(pooling, list(agents))
Aber, wo ich alle Argumente hinzufügen, dass die Pooling-Funktion benötigt?
wie es ist:
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)
Es ist die meiste Zeit ist in meinem Programm raubend Funktion. Und @jit
hilft nicht viel.
Dank einem Haufen
Hinweis: Die globale Variable oder der Parameter '' my_graveyard'' fehlt. –
In der Tat, danke. –