第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

遍歷列表并多次刪除其元素

遍歷列表并多次刪除其元素

四季花海 2022-10-06 16:18:17
我在 Python 中有以下腳本,每 30 秒檢查一次列表中的所有任務,當任務完成(失敗、取消或完成)時,該任務將從原始任務中刪除,然后再次跟蹤其他任務。代碼以這種方式運行良好。問題是我不確定while循環(huán)的每次迭代是否都在創(chuàng)建一個新列表,因為整個過程可能需要幾個小時,所以我不想在內存中創(chuàng)建不必要的數(shù)據。def download():    while tasks:        for task in tasks[:]:            success = 0            file_name = task[1]            task_index = tasks.index(task)            task_state = ee.data.getTaskStatus(task[0])[0]['state']            print(task, task_state)            if  task_state == FAILED:                tasks.remove(tasks[task_index])            elif task_state in [CANCEL_REQUESTED, CANCELLED]:                tasks.remove(tasks[task_index])            elif task_state == COMPLETED:                tasks.remove(tasks[task_index])                success = 1            if success == 1:                do_something()        if tasks:            time.sleep(30)        else:            print('Done!')download()
查看完整描述

2 回答

?
慕萊塢森

TA貢獻1810條經驗 獲得超4個贊

您顯示的代碼沒有創(chuàng)建另一個列表,您也可以改進一下:


to_remove_states = {CANCEL_REQUESTED, CANCELLED, FAILED, COMPLETED}


def my_filter(taks):

    state = ee.data.getTaskStatus(task[0])[0]['state']

    if state in to_remove_states:

        if state == COMPLETED:

            do_something()   # should not be dependent on your tasks form download function

        return False

    return True


def download():

    while tasks:

        time.sleep(30)

        tasks  = list(filter(my_filter, tasks))

    print('Done!')


download()


查看完整回答
反對 回復 2022-10-06
?
HUH函數(shù)

TA貢獻1836條經驗 獲得超4個贊

您的代碼中沒有創(chuàng)建新列表。但你可能想縮短一點:


def download():

while tasks:


    for task in tasks[:]:

        success = 0

        file_name = task[1]

        task_index = tasks.index(task)

        task_state = ee.data.getTaskStatus(task[0])[0]['state']


        print(task, task_state)


        if task_state in [CANCEL_REQUESTED, CANCELLED, FAILED, COMPLETED]:

            tasks.remove(tasks[task_index])

        if task_state == COMPLETED:

            do_something()


    if tasks:

        time.sleep(30)

    else:

        print('Done!')

download()

我認為這段代碼很好用;)


查看完整回答
反對 回復 2022-10-06
  • 2 回答
  • 0 關注
  • 138 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號