我只是在 Python 中嘗試多處理,但遇到了問題。
from multiprocessing import Process
w = 4;
arr = []
def func(num):
for i in range(num,50,w):
arr.append(i)
if __name__ == '__main__':
p1 = Process(target=func, args=(1,))
p1.start()
p2 = Process(target=func, args=(2,))
p2.start()
p1.join()
p2.join()
運行代碼后,我得到 'arr' 陣列的空值。
更新:任何只想解決此類問題的人都可以更好地使用執行緒。
import threading
w = 4;
arr = []
def func(num):
for i in range(num,50,w):
arr.append(i)
if __name__ == '__main__':
jobs = []
jobs.append(threading.Thread(target=func, args=(1,)))
jobs.append(threading.Thread(target=func, args=(2,)))
jobs.append(threading.Thread(target=func, args=(3,)))
for j in jobs:
j.start()
for j in jobs:
j.join()
uj5u.com熱心網友回復:
多處理使用子行程,而不是執行緒。
您腌制了空陣列arr,將其運送給第一個孩子,然后將其丟棄。然后你對第二個子行程做了同樣的事情。
您將需要進行一些 IPC 行程間通信以使子級與父級同步。但這似乎是一個XY問題,您真正關心的問題比您描述的要復雜。(我們非常感謝您提供MRE的麻煩!)
tl; dr:不,這種方法行不通,子行程不是執行緒。
劇透警告:最簡單和最強大的使用方式multiprocessing往往如下所示:
for result in pool( ... ):
...
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/460081.html
