python中如何判断一个dict是另一个dict的子集?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python中如何判断一个dict是另一个dict的子集?相关的知识,希望对你有一定的参考价值。

比如 d1 = 'a':'b', 'c':'d' d2 = 'a':'b' d3 = 'c':'d'
则d2,d3是d1的子集,有没有什么现成的函数可以判断这种子集关系?

参考技术A set(d2.items()).issubset(d1.items())
set(d3.items()).issubset(d1.items())

python manager.dict()锁定如何工作:

managers.dict()允许跨进程共享字典并执行线程安全操作。在我的例子中,每个协调器进程使用m元素和n工作进程创建共享字典,读取和写入单个dict键。

managers.dict()有一个单独锁定dict或m锁,一个锁定每个键?

当工人不必相互沟通时,是否有另一种方法可以将m元素分享给n工人,而不是共享的dict?

相关的python-manager-dict-is-very-slow-compared-to-regular-dict

答案

经过一些尝试,我可以说每个经理dict只有一个锁。以下代码证明了这一点:

import time
import multiprocessing as mp


def process_f(key, shared_dict):
        values = [i for i in range(64 * 1024 * 1024)]
        print "Writing {}...".format(key)
        a = time.time()
        shared_dict[key] = values
        b = time.time()
        print "released {} in {}ms".format(key, (b-a)*1000)


def main():
    process_manager = mp.Manager()
    n = 5
    keys = [i for i in range(n)]
    shared_dict = process_manager.dict({i: i * i for i in keys})

    pool = mp.Pool(processes=n)

    for i in range(n):
        pool.apply_async(process_f, (keys[i], shared_dict))
    time.sleep(20)


if __name__ == '__main__':
    main()

输出:

Writing 4...
Writing 3...
Writing 1...
Writing 2...
Writing 0...
released 4 in 3542.7968502ms
released 0 in 4416.22900963ms
released 1 in 6247.48706818ms
released 2 in 7926.97191238ms
released 3 in 9973.71196747ms

Process finished with exit code 0

写作时间的增加表明了正在发生的等待。

以上是关于python中如何判断一个dict是另一个dict的子集?的主要内容,如果未能解决你的问题,请参考以下文章

Python之dict字典详解

Python之Dict字典

Python基础:基本数据类型(dict)

字典dict

Python 基础数据类型之dict

python判断两个字典变化