Python 如何在多个线程里操作同一个类实例?

2019 年 1 月 7 日
 chuanqirenwu

假设我有一个类是这样的:

class Foo:
    def __init__(self, users)
         self.users = users # users 是一个字典

这里 users 是一个字典,key 是 user 的 id,value 记录这个 user 的某些信息。

现在需要对这个 users 进行一个循环操作,操作都是独立的,不同 id 的 user 不会相互影响。显然,使用多线程的方式可以提高效率。伪代码如下:

foo = Foo(users=users)

for key, value in foo.users.items():
    do_something()

那么问题来了,如何使得多个线程能够同时操作 self.users 呢?因为操作都是相互独立的,不存在线程同步问题,该怎么做呢?

3264 次点击
所在节点    Python
5 条回复
seanzhao
2019 年 1 月 7 日
使用 ThreadLocal 试试
codechaser
2019 年 1 月 7 日
队列?每次一个线程只取一个
cgsv
2019 年 1 月 7 日
直接 map(do_something, foo.users)就好了,map 的实现可以用多进程 multiprocessing.Pool 或多线程 multiprocessing.dummy.Pool
smdbh
2019 年 1 月 8 日
没看懂啊。不是直接开线程么?
yangsi
2019 年 1 月 15 日
1 python 解释器 gil 限制 导致 cpu 密集型操作使用多线程方式无法优化

2 多线程共享全局变量,foo 是全局的变量,在子线程里面可以直接用

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

https://study.congcong.us/t/524732

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

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

© 2021 V2EX