在Python中使用JOBLIB共享内存
如果我理解得很好,那么在joblib中使用backend='threading'允许声明变量在不同线程之间共享内存 例如,请参见下面的玩具示例:在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
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'
有人知道原因吗
先谢谢你