我有以下代码可以很好地与一个进程配合使用,但不能与多个进程配合使用。没有错误消息,但是类属性似乎没有保存,我也不知道为什么或如何修复它。我正在Windows下运行代码
define('WP_HOME','https://www.domain-name.com');
define('WP_SITEURL','https://www.domain-name.com');
if (strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false)
$_SERVER['HTTPS']='on';
结果是
class T:
a = 0
b = 0
c = 0
def do_something(self):
self.a = 10
self.b = 5
self.c = 1
return 'ok'
def call_T(a):
return a.do_something()
if __name__ == '__main__':
B = T()
print(B.a)
B.do_something()
print(B.a)
C = [T() for i in range(20)]
print(C[14].c)
F = Parallel(n_jobs=2)(delayed(call_T)(C[i]) for i in range(20))
print(F)
print(C[14].b)
现在对于相同的代码,只需更改n_jobs = 1,它将为我提供正确的预期结果
0
10
0
['ok', 'ok', 'ok', 'ok', 'ok', 'ok', 'ok', 'ok', 'ok', 'ok', 'ok', 'ok', 'ok', 'ok', 'ok', 'ok', 'ok', 'ok', 'ok', 'ok']
0
我无能为力,因为出了什么问题。感谢您的帮助
答案 0 :(得分:0)
我找到了一个简单的答案 事实证明joblib仅传递返回方法的结果,而不传递内存 使用线程,但是两者都会通过
class T:
a = 0
b = 0
c = 0
def do_something(self):
self.a = 10
self.b = 5
self.c = 1
return 'ok'
def call_T(a):
return a.do_something()
if __name__ == '__main__':
B = T()
print(B.a)
B.do_something()
print(B.a)
C = [T() for i in range(20)]
print(C[14].c)
F = Parallel(n_jobs=3,backend="threading")(delayed(call_T)(C[i]) for i in range(20))
print(F)
print(C[14].b)
结果
0
10
0
['ok', 'ok', 'ok', 'ok', 'ok', 'ok', 'ok', 'ok', 'ok', 'ok', 'ok', 'ok', 'ok', 'ok', 'ok', 'ok', 'ok', 'ok', 'ok', 'ok']
5