※ 本文轉寄自 ptt.cc, 文章原始頁面
看板Python
標題

[問題] python list問題

最新2024-03-26 09:54:00
留言42則留言,3人參與討論
推噓3 ( 3039 )
我目前的程式有兩個thread A與B. Thread A 會用append的方式寫入data 到list c裡面, thread B 會用for loop的方式從c的起頭開始讀取data. 想請教以下一個狀況. ------------------------------------------------------- 假設目前list裡面有100筆data. 然後thread B用以下方式開始讀取data. 讀取完之後,會把第1筆~第90筆data刪除. code如下. for idx,data in enumerate(c): print(data) del c[:91] Thread B讀取到第50筆data的時候, thread A append一筆data到c的最後面, code如下, c.append(data) ---------------------------------------------------------------- 想請問三個問題 1. Thread B 還能按造順序讀取原本list裡面的第1筆到第100筆data嗎? 2. Thread B 不會讀取到第101筆data對嗎? 3. Thread B 做完del這行code之後, c裡面會只剩第91~101筆data嗎? 我目前沒有使用mutex來同步這兩個thread的行為, 然後以上三個問題是我希望的程式執行結果. 想問如果不使用mutex的情況下, 程式會是這樣的執行結果嗎? 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.34.223.241 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1711360755.A.19C.html

42 則留言

※ 編輯: kakar0to (1.34.223.241 臺灣), 03/25/2024 18:00:02
※ 編輯: kakar0to (42.73.232.254 臺灣), 03/25/2024 18:07:18

lycantrope, 1F
為什麼不用queue

kakar0to, 2F
好像是queue比較符合我想要的功能

kakar0to, 3F
不過queue能夠peek嗎? 因為其實thread B可能只需要第一

kakar0to, 4F
筆到第90筆data這樣, 91以後的不能刪除掉

kakar0to, 5F
我可能要修改一下內文
※ 編輯: kakar0to (111.251.229.11 臺灣), 03/25/2024 18:55:30

wuyiulin, 6F
你確定你用的是 thread?Python有 GIL

wuyiulin, 7F
然後對,你應該用 queue 然後在 thread B 裡面自己寫 c

wuyiulin, 8F
ounter 解決讀取之類的

kakar0to, 9F
但其實thread B要刪除到哪一筆, 是讀取過程中才知道的

kakar0to, 10F
如果用queue get出來, 如果不能刪除, 還需要再放回queue

kakar0to, 11F
原本的位置這樣

kakar0to, 12F
第90筆是for loop過程中決定的, 在for loop之前是不知道

kakar0to, 13F

wuyiulin, 14F
有重複元素嗎?沒有的話宣告一個存tmp檢查 當 thread B

wuyiulin, 15F
觸發條件就存,然後進 while 一直刪直到這個元素

wuyiulin, 16F
不然你也可以觸發後反向一路刪到頭

wuyiulin, 17F
幹不對啊是 Python

wuyiulin, 18F
好 假設你讀到第N個觸發刪除

wuyiulin, 19F
應該可以 list = list[N:] 這樣就好了

kakar0to, 20F
了解 我感覺我是不是加個mutex就好, 這樣好像比較簡化

kakar0to, 21F
問題

wuyiulin, 22F
加鎖是保險,看你有什麼需求怎麼用,因為有鎖也有會上

wuyiulin, 23F
鎖跟釋放的時間消耗。

wuyiulin, 24F
我得到的觀念最好還是 Lock free 啦,請其他人補充

kakar0to, 25F
對 我也是不想用mutex

kakar0to, 26F
那想問wuy大 你知道第一個與第二個問題的答案嗎?

kakar0to, 27F
還是已經回答了 哈

kakar0to, 28F
不過wuy大有提到GIL, 所以python是不是沒有thread這種東

kakar0to, 29F
西? 我問的問題是不存在的問題?

kakar0to, 30F
因為我的程式是一個process,然後會提供一個callback

kakar0to, 31F
function給一個外部的module來呼叫, 這個module不是我

kakar0to, 32F
寫的, 所以我不太知道這個module是怎麼樣的方式去call

kakar0to, 33F
這個callback function. 然後callback function裡面就是

kakar0to, 34F
append一個data到我的process提供的list裡面

kakar0to, 35F
然後我的process會定期去檢查list裡面的data, 然後刪除

kakar0to, 36F
前面的部分. 現在我擔心同時append以及刪除會不會有什麼

kakar0to, 37F
問題.

kakar0to, 38F
不過會不會不會同時append與刪除, 因為python GIL的限制

wuyiulin, 39F
會,資料可能會裂開,但是你丟個簡單範例跑看看

wuyiulin, 40F
第一個問題可以,如果你是用索引去拿 list 元素

wuyiulin, 41F
第二個問題要看你怎麼設計程式

lycantrope, 42F
...

kakar0to 作者的近期文章

[請益] 請問日本etf
請問日本有類似0050這種市值型前幾大的etf嗎? 主要是想投資日本前幾大商社的公司.謝謝
[問卦] 這次不讓民進黨難看
難看的就是我們 大家同意嗎? 有沒有滿20字了? 好像還沒...
[問卦] 為什麼不能在居住地投票
想問這個技術上不可行的地方在哪裡? 還是塔綠班怕年輕人投票率太高? 可以解惑一下嗎
Re: [新聞] 年輕人投票率85%就當選 柯文哲喊話:
: 柯文哲這次的政策毫無勝選機會 就算柯文哲勝選機率是0, 我還是會投柯文哲. 想騙我棄柯保侯是不可能的 還好我精的跟猴一樣~~~(此猴非彼侯)
Re: [新聞] 衛福部多次要求高端公開合約 王必勝:
: 陳建仁說,全世界學術界和臨床實驗結果,都顯示高端是好的疫苗,今年一月才刊登,高端 : 在預防重症、死亡,等於BNT和莫德納,比AZ還要好。對於高端案件,從頭到尾就是一個打 : 擊國內生醫產業發展的情形。 : 想請問一下塔綠班, 效果等同
[問題] c++ 繼承問題
想請問一個class 繼承問題 class Base { public: virtual void foo() = 0; Base{}; ~Base{}; } clase Derived : public Base { 內容略 } 請問有辦
[問題] 新竹肩關節骨科醫生推薦
如提,肩關節受傷很久了, 但不知道具體是哪裡受傷, 可以請大家推薦新竹比較會處理 肩關節的骨科醫生嗎? 謝謝.
更多 kakar0to 作者的文章...