简体   繁体   English

并行调用一个函数内的多个函数

[英]calling multiple function inside a function in parallel

I have 10 functions and they all query against a DB and return a DF.我有 10 个函数,它们都查询一个数据库并返回一个 DF。

I can not execute them one after another as I join them at the end and if the timestamp doesn't match I will get null values.当我最后加入它们时,我无法一个接一个地执行它们,如果时间戳不匹配,我将获得空值。 As I query large chunk of data so it takes time and so I want to run it in parallel.当我查询大量数据时,它需要时间,所以我想并行运行它。

def df1(domain,durarion):
    do something
    return df

def df2(domain,durarion):
    do something
    return df

def df3(domain,durarion):
    do something
    return df

def df4(domain,durarion):
    do something
    return df

def df5(domain,durarion):
    do something
    return df

def df6(domain,durarion):
    do something
    return df

def df7(domain,durarion):
    do something
    return df

def df8(domain,durarion):
    do something
    return df

def final_df(domain,duration):
    df = pd.concat([df1(domain,duration),
                    df2(domain,duration),
                    df3(domain,duration),
                    df4(domain,duration),
                    df5(domain,duration),
                    df6(domain,duration),
                    df7(domain,duration),
                    df8(domain,duration)
                    ],axis=1,sort=False).reset_index()
    df = df.set_index('time')
    return df

df = final_df(domain,duration)

I want to call all the 8 functions df1, df2, df3, df4, df5, df6, df7, df8 inside final_df function in parallel.我想在final_df函数中并行调用所有 8 个函数df1, df2, df3, df4, df5, df6, df7, df8

PS:- I am familiar with multiprocessing but I just don't want to run them in parallel but also to save its result. PS:- 我熟悉多处理,但我只是不想并行运行它们,但也不想保存其结果。

I was able to solve it :-我能够解决它:-

import pandas as pd
import numpy as np
import threading
import time


def df1(domain,durarion):
    do something
    return df

def df2(domain,durarion):
    do something
    return df

def df3(domain,durarion):
    do something
    return df

def df4(domain,durarion):
    do something
    return df

def df5(domain,durarion):
    do something
    return df

def df6(domain,durarion):
    do something
    return df

def df7(domain,durarion):
    do something
    return df

def df8(domain,durarion):
    do something
    return df

def df9(domain,durarion):
    do something
    return df

def df10(domain,durarion):
    do something
    return df

def df11(domain,durarion):
    do something
    return df

def getdf(domain,duration):
    with concurrent.futures.ThreadPoolExecutor() as executor:
        f1 = executor.submit(df1, domain,duration)
        f2 = executor.submit(df2, domain,duration)
        f3 = executor.submit(df3, domain,duration)
        f4 = executor.submit(df4, domain,duration)
        f5 = executor.submit(df5, domain,duration)
        f6 = executor.submit(df6, domain,duration)
        f7 = executor.submit(df7, domain,duration)
        f8 = executor.submit(df8, domain,duration)
        f9 = executor.submit(df9, domain,duration)
        f10 = executor.submit(df10, domain,duration)
        f11 = executor.submit(df11, domain,duration)
        df = pd.concat([f1.result(),f2.result(),f3.result(),f4.result(),f5.result(),f6.result(),f7.result(),f8.result(),f9.result(),f10.result(),f11.result()],axis=1,sort=False).reset_index()
        df['time'] = pd.to_datetime(df['time']) 
        df = df.set_index('time')
    return df

df = getdf(domain, duration)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM