在python多处理中引入延迟

时间:2017-04-10 16:11:40

标签: python multiprocessing

我有以下代码:

from multiprocessing import Pool
import pandas as pd

def f(x):
    data = pd.read_sql(query[x], conn) #query and conn are particular to my PC so no point in pasting it here
    #do large math operations here
    return answer

if __name__ == '__main__':
    p = Pool(5)
    print(p.map(f, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]))

我的电脑上有8个处理器。现在所有处理器同时通过conn访问数据库,这导致数据库端出现一些问题。

如何更改上述代码,以便一次只能访问数据库。一个处理器完成数据库访问的时刻,另一个处理器可以再次自由访问数据库。已完成数据库访问的处理器应继续进行数学运算。基本上,我试图确保数据库访问不是同时的,但数据库访问代码保持在多处理框架内。作为最后的手段,我可​​以尝试在处理数据之前读取数据,但我想看看是否可以在不更改现有代码的情况下执行此操作。

1 个答案:

答案 0 :(得分:1)

使用(N, 3)

保护对数据库的访问权限
int mortgageTerm;
cout << "Mortgage term (1 - 40 years) : ";

while (!(cin >> mortgageTerm) ||
       mortageTerm < 1        ||
       mortgageTerm > 40      )
{
    cout << "That's not a valid choice! Try again : ";
    cin.clear();
    cin.ignore(std::numeric_limits<streamsize>::max(), '\n');
}

// If you are concerned about extra input after the number and want to clear the input stream
// cin.ignore(std::numeric_limits<streamsize>::max(), '\n');