首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >循环不遍历列表中的所有元素。

循环不遍历列表中的所有元素。
EN

Stack Overflow用户
提问于 2012-02-21 06:21:15
回答 1查看 1.1K关注 0票数 0

我有过

代码语言:javascript
运行
复制
print(len(pcb.resources))
for res in pcb.resources:
    print ("Releasing resource: " + res.name)
    self.releaseResource(res.name, pcb)
print("After: " + str(len(pcb.resources)))

哪种输出

代码语言:javascript
运行
复制
2 # from 1st print: this is correct, I have 2 elements in list
Releasing resource: R1 # is it not looping through the 2nd element? Notice the len() is 2
After: 1 # from print after loop. I am expecting 0

更新

我注意到它与函数调用有关。releaseResource。但是releaseResource会如何影响调用循环呢?

代码语言:javascript
运行
复制
def releaseResource(self, name, pcb = None):
    callScheduler = pcb is not None # if pcb is set, means calling from release resource, so dont call scheduler 1st

    if pcb is None:
        pcb = self.running

    # check if resource exists
    if not any(rcb.name == name for rcb in self.resources): 
        return False    
    rcb = next(r for r in self.resources if r.name == name)

    # remove resource from running pcb's resources
    pcb.resources.remove(rcb)

    if len(rcb.waitingList) == 0:
        # no waiting processes: resource is free
        rcb.status = RCB.STATUS_FREE
        rcb.heldBy = None
    else:
        # make dequeue from resource waiting list
        pcb = rcb.waitingList.popleft()

        # put resource into process resources list
        pcb.resources.append(rcb)
        rcb.heldBy = pcb

        # make it ready
        pcb.status = PCB.STATUS_READY
        pcb.statusList = self.readyList
        self.readyList.enqueue(pcb)

        # call scheduler
        if callScheduler:
            self.scheduler()

    return True
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-21 06:35:18

在我看来,您修改了迭代的releaseResource中的列表,即行pcb.resources.remove(rcb)。试一试:

代码语言:javascript
运行
复制
for res in pcb.resources[:]:
    print ("Releasing resource: " + res.name)
    self.releaseResource(res.name, pcb)

文档

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9373094

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档