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

2019-01-07 18:22:51 +08:00
 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 呢?因为操作都是相互独立的,不存在线程同步问题,该怎么做呢?

2617 次点击
所在节点    Python
5 条回复
seanzhao
2019-01-07 18:36:29 +08:00
使用 ThreadLocal 试试
codechaser
2019-01-07 18:45:54 +08:00
队列?每次一个线程只取一个
cgsv
2019-01-07 19:42:54 +08:00
直接 map(do_something, foo.users)就好了,map 的实现可以用多进程 multiprocessing.Pool 或多线程 multiprocessing.dummy.Pool
smdbh
2019-01-08 01:10:27 +08:00
没看懂啊。不是直接开线程么?
yangsi
2019-01-15 11:31:41 +08:00
1 python 解释器 gil 限制 导致 cpu 密集型操作使用多线程方式无法优化

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

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

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

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

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

© 2021 V2EX