在Python中使用JOBLIB共享内存

在Python中使用JOBLIB共享内存,python,joblib,Python,Joblib,如果我理解得很好,那么在joblib中使用backend='threading'允许声明变量在不同线程之间共享内存 例如,请参见下面的玩具示例: class test: def __init__(self,): self.a = np.zeros(40) def set_a(self, i): self.a[i] = 2*i + 1 t = test() print('Initial va

如果我理解得很好,那么在joblib中使用backend='threading'允许声明变量在不同线程之间共享内存

例如,请参见下面的玩具示例:

class test:
    
    def __init__(self,): 
        
        self.a = np.zeros(40)
    
    def set_a(self, i):
        self.a[i] = 2*i + 1
        
t = test()

print('Initial value of a = ' + str(t.a) )

Parallel(n_jobs=-40, backend='threading', timeout=1e6)(delayed(t.set_a)(i) for i in range(40) )

print('Final value of a = ' + str(t.a) )
该程序的输出为:

Initial value of a = [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
Final value of a = [ 1.  3.  5.  7.  9. 11. 13. 15. 17. 19. 21. 23. 25. 27. 29. 31. 33. 35.
 37. 39. 41. 43. 45. 47. 49. 51. 53. 55. 57. 59. 61. 63. 65. 67. 69. 71.
 73. 75. 77. 79.]
嗯,让我好奇的是,即使使用backend='loky'这段代码也能工作。同时,我正在使用的另一个代码(下面的图片显示了我试图使用joblib运行的方法,如果我使用“线程化”运行,则字典会被更改,而使用“loky”则不会被该方法更改)只适用于后端class='threading'

有人知道原因吗

先谢谢你