gpt4 book ai didi

python - 在Python多处理中引入延迟

转载 作者:太空宇宙 更新时间:2023-11-03 15:23:24 24 4
gpt4 key购买 nike

我有以下代码:

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 访问数据库,这导致数据库端出现一些问题。

如何更改上述代码,以便一次完成对数据库的访问。当一个处理器完成数据库访问时,另一个处理器就可以再次访问数据库。完成数据库访问的处理器应该继续进行数学运算。基本上,我试图确保数据库访问不是同时进行的,但数据库访问代码保留在多处理框架内。作为最后的手段,我可​​以尝试在处理数据之前读取数据,但我想看看是否可以在不更改现有代码的情况下做到这一点。

最佳答案

使用multiprocessing.Lock保护对数据库的访问:

from multiprocessing import Pool, Lock
import pandas as pd

conn_lock = Lock()

def f(x):
with conn_lock:
data = pd.read_sql(query[x], conn)
#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]))

关于python - 在Python多处理中引入延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43328114/

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