python 中将一个对象作为参数传入多个线程函数中会怎么样?

2016-04-15 16:21:38 +08:00
 glacer
这是对象是作为引用传入还是在每个线程中都有复制呢?如果是引用的话,多线程调用对象内部的方法时会影响返回值吗?
4140 次点击
所在节点    Python
1 条回复
billgreen1
2016-04-15 20:54:52 +08:00
先说结论:
多线程的话,不会。由于 GIL ,不会出现多个线程『同时』修改你的对象。
多进程,会。因为是 fork 一份数据过去的。


代码如下,如果多进程,去掉 backend 参数即可。

from joblib import Parallel, delayed
import numpy as np
import time
class C(object):
pass

def func(c):
c.value+=1
print(c.value)

c = C()
c.value=0

Parallel(n_jobs=4, backend='threading')(delayed(func)(c) for _ in range(20))

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/271370

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX