多处理过程中间输出

时间:2017-07-19 16:07:17

标签: python multiprocessing joblib

我有一个加载数据和循环的函数,例如。

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. 一旦每个多处理过程到达预定义的点(例如完成循环的一次迭代),将这些中间值返回到另一个函数(expensive_sum)以进行处理 - 假设每个单独的多处理过程不能持续到 expensive_sum 返回
  3. 但是,我想让多处理过程保持活跃,以便我不必重新初始化它们(减少开销)
  4. 有没有办法做到这一点?

1 个答案:

答案 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

时继续