我創建了使用 Python 和多執行緒對陣列求和的簡單代碼,但我知道它是按順序作業的。我的問題是,如何使用多執行緒將代碼更改為不按順序作業?求和代碼:
import threading
matrix = [6,5,4,3,2,1,0]
def sum(n, **totalSum):
sumThreads['sumThreads'] = matrix[n]
sumThreads = {"sumThreads":0}
for i in range(len(matrix)):
t = threading.Thread(target=sum, args=(i,), kwargs=sumThreads)
t.start()
t.join()
print("Suma: ",sumThreads['sumThreads'])
尋找最小值的代碼:
import threading
matrix = [6,5,4,3,2,1,0]
def min(n, **total):
if matrix[n-1] <= matrix[n]:
if (matrix[n] < minThreads['minThreads']):
minThreads['minThreads'] = matrix[n]
else:
if (matrix[n] < minThreads['minThreads']):
minThreads['minThreads'] = matrix[n]
minThreads = {"minThreads": matrix[1]}
for i in range(len(matrix)):
t = threading.Thread(target=min, args=(i,), kwargs=minThreads)
t.start()
t.join()
print("Minimum: ",minThreads['minThreads'])
我嘗試使用多處理來實作它,如下所示:
if __name__ == '__main__':
import multiprocessing
my_input = [6,5,4,3,2,1,0]
# Pool over all CPUs
print(sum(multiprocessing.Pool().map(int, my_input)))
print(min(multiprocessing.Pool().map(int, my_input)))
但我需要使用多執行緒。任何幫助將不勝感激!
uj5u.com熱心網友回復:
您不能my_input在行程之間共享您的串列。一個好的策略是將您的資料分成小塊,然后計算部分資料,最后處理所有部分結果:
你的代碼可能是:
import multiprocessing as mp
import time
import random
CHUNKSIZE = 3
def partial_sum(l):
# Include a latency for demo
time.sleep(random.random())
s = sum(l)
print(f"Sum of {str(l):<15}: {s:>3}")
return s
if __name__ == '__main__':
matrix = [6,5,4,3,2,1,0]
chunks = (matrix[i:i CHUNKSIZE]
for i in range(0, len(matrix), CHUNKSIZE))
with mp.Pool(mp.cpu_count()) as pool:
global_sum = sum(pool.map(partial_sum, chunks))
print('---------------------------')
print(f"Global total: {global_sum}")
輸出:
Sum of [3, 2, 1] : 6
Sum of [6, 5, 4] : 15
Sum of [0] : 0
---------------------------
Global total: 21
更新
找出最小值:
import multiprocessing as mp
CHUNKSIZE = 3
def local_min(l):
m = min(l)
print(f"Local minimum of {l} is {m}")
return m
if __name__ == '__main__':
matrix = [6,5,4,3,2,1,0]
chunks = (matrix[i:i CHUNKSIZE]
for i in range(0, len(matrix), CHUNKSIZE))
with mp.Pool(mp.cpu_count()) as pool:
l = pool.map(local_min, chunks)
m = min(l)
print('--------------------------------')
print(f"Global minimum of {l} is {m}")
輸出:
Local minimum of [6, 5, 4] is 4
Local minimum of [3, 2, 1] is 1
Local minimum of [0] is 0
--------------------------------
Global minimum of [4, 1, 0] is 0
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/361156.html
下一篇:在JMeter執行緒組中共享變數
