安全删除异步编程中的列表元素吗?

时间:2019-03-23 18:13:30

标签: python

在Python中,如何安全地从列表中删除元素? 我有一个异步例程,该例程始终将元素添加到列表(即类字段),而另一个异步例程则根据某些条件从此列表中删除元素。这两个例程可能同时运行。因此,我想知道像代码是同步的那样删除元素是否安全-即使用del。如果没有,我应该怎么做?

1 个答案:

答案 0 :(得分:0)

这听起来像Producer-Consumer Problem。为了解决此问题,您需要进行进程间通信。在这种情况下,您通常可以使用semaphore

Wikipedia上的(伪代码)解决方案如下所示:

semaphore fillCount = 0; // items produced
semaphore emptyCount = BUFFER_SIZE; // remaining space

def producer: 
    while True: 
        item = produceItem();
        down(emptyCount);
        putItemIntoBuffer(item);
        up(fillCount);

def consumer: 
    while True:
        down(fillCount);
        item = removeItemFromBuffer();
        up(emptyCount);
        consumeItem(item);

我认为这是进一步探索并在Python中实现它的一个很好的起点。