gpt4 book ai didi

python - 多处理过程中间输出

转载 作者:太空宇宙 更新时间:2023-11-03 14:59:54 25 4
gpt4 key购买 nike

我有一个加载数据并循环多次的函数,例如

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

所以我想

  1. 并行运行多处理进程(以减轻加载所有昂贵帐户数据的负载)
  2. 一旦每个多处理进程达到预定义点(例如,完成循环的一次迭代),将这些中间值返回到另一个函数 (exppressive_sum) 进行处理 - 假设每个单独的多处理进程无法继续,直到 expense_sum 返回
  3. 但是,我希望保持多处理进程处于事件状态,这样我就不必重新初始化它们(减少开销)

有什么办法可以做到这一点吗?

最佳答案

from multiprocessing import Manager
queue = manager.Queue()

Once each multiprocessing process hits a predefined point do

queue.put(item)

与此同时,另一个昂贵的功能却如此

queue.get(item)  ==>  blocking call for get

昂贵的函数等待get并在获取值时继续处理它并再次等待get

关于python - 多处理过程中间输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45195746/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com