假设我有一个类是这样的:
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 呢?因为操作都是相互独立的,不存在线程同步问题,该怎么做呢?
1
seanzhao 2019-01-07 18:36:29 +08:00
使用 ThreadLocal 试试
|
2
codechaser 2019-01-07 18:45:54 +08:00 via Android
队列?每次一个线程只取一个
|
3
cgsv 2019-01-07 19:42:54 +08:00 1
直接 map(do_something, foo.users)就好了,map 的实现可以用多进程 multiprocessing.Pool 或多线程 multiprocessing.dummy.Pool
|
4
smdbh 2019-01-08 01:10:27 +08:00
没看懂啊。不是直接开线程么?
|
5
yangsi 2019-01-15 11:31:41 +08:00 via iPhone
1 python 解释器 gil 限制 导致 cpu 密集型操作使用多线程方式无法优化
2 多线程共享全局变量,foo 是全局的变量,在子线程里面可以直接用 |