[英]Error in Python multi-threading
我使用多線程進行計算:
def calc_score(score, i, j, a, b):
score[i, j] = func(a, b)
if __name__ == '__main__':
df = pd.read_excel('df.xlsx')
db = pd.read_csv('db2.csv', converters= {'create_date': pd.to_datetime})
m = len(df)
n = len(db)
pool = Pool(multiprocessing.cpu_count())
score = np.zeros([m, n])
for i in range(m):
a = df.loc[i, 'val']
if a == 'None' or a == '':
score[i, :] = 0
else:
for j in range(n):
b = db.loc[j, 'val']
pool.apply_async(calc_score, (score, i, j, a, b))#multi-threading
pool.close()
pool.join()
我收到一條錯誤消息:
Traceback (most recent call last):
File "C:\main.py", line 107, in <module>
File "C:\Program Files\Python36\lib\multiprocessing\pool.py", line 356, in apply_async
File "C:\Program Files\Python36\lib\multiprocessing\pool.py", line 620, in __init__
RuntimeError: can't allocate lock
原因是什么,如何解決?
我可以使用互斥鎖來鎖定該部分嗎?
更新:
mutex = threading.Lock()
def calc_score(score, i, j, a, b):
with mutex:
score[i, j] = func(a, b)
我想問題是試圖直接共享一個numpy矩陣。
我看到這些選項。
multprocessing.Array
,但是對於numpy,它必須使用一些其他技巧。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.