我有一个加载数据和循环的函数,例如。
def calculate_profit(account):
account_data = load(account) #very expensive operation
for day in account_data.days:
print(account_data.get(day).profit)
因为数据的加载很昂贵,所以使用joblib / multiprocessing做这样的事情是有意义的:
arr = [account1, account2, account3, ...]
joblib.Parallel(n_jobs=-1)(delayed(calculate_profit)(arr))
但是,我想要在calculate_profit
函数的中间结果上应用另一个昂贵的函数。例如,假设总结所有利润并将其处理/发布到网站/等是一项昂贵的操作。此外,我还需要前一天的利润来计算此功能的利润变化。
def expensive_sum(prev_day_profits, *account_profits):
total_profit_today = sum(account_profits)
profit_difference = total_profit_today - prev_day_profits
#some other expensive operation
#more expensive operations
所以我想
expensive_sum
)以进行处理 - 假设每个单独的多处理过程不能持续到 expensive_sum
返回 有没有办法做到这一点?
答案 0 :(得分:1)
Mid$(message1, 17, Len(message1) - 18)
每个多处理过程都会达到预定义的点 做
from multiprocessing import Manager
queue = manager.Queue()
同时其他昂贵的功能
queue.put(item)
昂贵的函数在queue.get(item) ==> blocking call for get
上等待,当它获得一个值处理它并继续等待get