的multiprocessing模塊Python是Unix和Windows兼容,並提供遠程和本地併發性wordDict。 Global Interpreter Lock使用子進程而不是線程。通過創建一個'Process'對象,然後調用其方法start()來生成進程。該過程遵循threading.Thread的API。
下面的例子演示瞭如何通過爲每個函數創建一個進程來並行執行兩個不同的函數,每個函數都有一個for循環。作爲一個有趣的筆記,每個進程都有自己的地址空間(虛擬內存)。因此,程序變量不會在進程之間共享。爲了說明這一點,我創建了兩個全局變量,並將它們設置爲它們在由局部變量更新時應該採用的相反值。正如你所看到的,他們保持對立,不更新。您可以使用IPC,進程間通信技術在兩個進程之間共享數據。
代碼
import multiprocessing
global_any = False
global_all = True
def calculate_any(number):
local_list_any = [1,2,3]
local_result_any = any(True if i == number else False for i in local_list_any)
global_any = local_result_any
print("This is the first result within a process: {}".format(local_result_any))
def calculate_all(number):
local_list_all = [1,2,3]
local_result_all = all(True if i == number else False for i in local_list_all)
global_all = local_result_all
print("This is the second result within a process: {}".format(local_result_all))
if __name__ == "__main__":
number = 2
p1 = multiprocessing.Process(target = calculate_any, args = (number,))
p2 = multiprocessing.Process(target = calculate_all, args = (number,))
p1.start()
p2.start()
p1.join()
p2.join()
print('The result of the ANY global variable: {}'.format(global_any))
print('The result of the ALL global variable: {}'.format(global_all))
結果
The result of the ANY global variable: False
The result of the ALL global variable: True
This is the first result within a process: True
This is the second result within a process: False
參考
https://docs.python.org/2/library/multiprocessing.html
https://pymotw.com/2/multiprocessing/basics.html
https://www.youtube.com/watch?v=Lu5LrKh1Zno
,與平行你的意思是:多處理? – adelineu
爲了更快速地獲得更高質量的答案,詳細解釋問題非常重要。你寫了_「我無法讓joblib循環訪問for循環」,但是'joblib'不在你提供的代碼中。所以我們不能確定你做錯了什麼,如果你沒有告訴我們你嘗試過什麼。此外,這是什麼意思,你不能得到它的工作?它是否提供了錯誤的結果(在這種情況下,結果是什麼?)還是會產生錯誤(在這種情況下,哪些錯誤?)。或者你的問題是關於'joblib'如何工作的? –
目前還不清楚你的問題與joblib的關係。另外,你在'for'循環中做的事情可能不會受益於Python的內置並行處理庫,多處理器和線程技術,因爲它是計算綁定的,並且正在更新全局('tfDict')。 – martineau