繁体   English   中英

Python字典和线程并发

[英]Python Dictionaries and Threading Concurrency

我在python 3中使用了非阻塞异步线程Websockets协议(Tornado)。我在全局级别上使用的字典非常保守,但是可以通过任意数量的线程进行更新(基本上是在新用户连接时,它们的套接字通过字典映射到一个对象)。 我已经建立了一个处理并发的基本系统……但这不是任何官方方法。 由于套接字是唯一的,所以我认为人们在尝试同时向同一套接字分配值时不会有任何问题,但是我想知道是否使用scale可能会有另一个问题,例如尝试获取调整字典大小时的内容。 作为参考,这是我想到的“并发修复程序”。

class Routing_Table:

    def set(self, key, value):
        self.blocked = self.blocked + 1
        self.table[key] = value
        self.blocked = self.blocked - 1

    def get(self, key):
        while(self.blocked > 0):
            pass
        return self.table[key]

    def __init__(self):
        self.table = {}
        self.blocked = 0

编辑:另外,您认为我应该添加一种类似于设置删除条目的方法吗?

如果要以线程安全的方式执行任何操作,则基本思想是:

class ConcurrentThingy:
    def __init__ (self):
        self.lock = Lock () # or RLock () if you want it to be reentrant    

    def concurrentlyAccessedMethod (self, *args, **kwargs):
        with self.lock: doMeanStuff ()

您的课程可能看起来像这样:

class Routing_Table:
    def set (self, key, value):
        with self.lock: self.table[key] = value

    def get(self, key):
        with self.lock: return self.table[key]

    def __init__(self):
        self.table = {}
        self.lock = Lock ()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM