set_interval() 是我們自定義的計時器函示指定時間到了就會重複呼叫指定函示。 call() 為自定義欲執行的函式。 import threading def set_interval ... ... <看更多>
「python thread重複執行」的推薦目錄:
- 關於python thread重複執行 在 Re: [問題] 限制某個function只能被叫到一次- 看板Python 的評價
- 關於python thread重複執行 在 [Python 常用] 實現setInterval 定時器圈呼叫函式功能 - 1010Code 的評價
- 關於python thread重複執行 在 Python 程式設計- Part 11 : Loop 重複執行/ 迴圈(上 ... - YouTube 的評價
- 關於python thread重複執行 在 Python Taiwan | 各位好,小弟我用flask及socketIo建立了一個 ... 的評價
- 關於python thread重複執行 在 Python - 100天从新手到大师 - GitHub 的評價
python thread重複執行 在 Python 程式設計- Part 11 : Loop 重複執行/ 迴圈(上 ... - YouTube 的推薦與評價
此影片介紹 Python 程式中如何讓你的程式可以設計得更複雜,程式設計三大結構,包含循序(sequence)、分支(decision making / branch)、與 重複 ... ... <看更多>
python thread重複執行 在 Python Taiwan | 各位好,小弟我用flask及socketIo建立了一個 ... 的推薦與評價
各位好,小弟我用flask及socketIo建立了一個網頁,網頁裡有個地方能讓使用者設定時間,而我的thread會根據這個設定的時間來決定多久重複執行一次,現在的問題是, ... ... <看更多>
python thread重複執行 在 Python - 100天从新手到大师 - GitHub 的推薦與評價
Contribute to jackfrued/Python-100-Days development by creating an account on ... 需要加入QQ学习群的可以扫描下面的二维码,三个群加一个即可,不要重复进群。 ... <看更多>
python thread重複執行 在 Re: [問題] 限制某個function只能被叫到一次- 看板Python 的推薦與評價
簡單回一下你的誤區。
1.) 的部分請見 https://git.io/JmZ9b
早一點的版本 (<3.6) 是直接用 None 來作 singleton, 在 Python 用 module scope 的
variables 做這種事還蠻常見的。
2.) 的部分
assign 之前要先用 global keyword 宣告成 global
在 multi-threading 的情況下,第 n 個 thread 有極大的可能在 assignment 完成之
前就進到 if condition, 也就是說client 的 creation 會被執行不只一次以上。
這情況蠻常見的,畢竟多數和 db 相關的 libs 都有直接或間接用到 C 會 release GIL
。
解法可參考上面 asyncio 作 thread-local 的方式,如果是想要 thread-global 的話一
般應該是用 multi-lock
(一時間想不到哪個 source code 裡面有範例可以看,建議自己試一下)
※ 引述《ddavid (謊言接線生)》之銘言:
: ※ 引述《MaR1nlolz (mumimumi)》之銘言:
: : 最近遇到個問題,請問一下各位,
: : 當執行python app.py時,不論MongoClient()被呼叫幾次,我希望create()只被呼叫
一
: : ,
: : 我目前的做法是透過global variable來判斷
: : create()是否被呼叫過,不過global variable用法幾乎都不太建議使用,
: : 避免被其他地方改到,想請問各位有沒有比較好的做法,以下是我的程式碼,謝謝
: 我覺得根本問題是你的使用方式出了問題:
: 1. instance本質上也不應該global使用
: 2. 你這段Code裡面有過多不必要的包裝
: 先跳過問題1。針對問題2,你會發現這裡的isInit == False幾乎等價於
: instance is None(除非很例外的情況導致MongoClient傳回None),也就是這是多
: 餘的邏輯包裝。最簡單的方式是:
: --- mongo.py
: from pymongo import MongoClient
: instance = None
: def create():
: if instance is None:
: instance = MongoClient(
: 'mongo://127.0.0.1:27017',
: maxPoolSize=10
: )
: --- app.py
: import mongo
: mongo.create() # 之後拿 mongo.instance 來運用
: mongo.create() # 重複呼叫create()會因為instance已經不是None而不會做任何事
: 事實上我想不太到為什麼會導致重複create的狀態,照理說程式應該開頭create
: 一次後就只用create好的實體,除非斷線否則再也不會呼叫第二次create才對。你如
: 果把問題一也解決,就會發現連create(或者說整個mongo.py)都是多餘包裝。
: : --- mongo.py
: : instance = None
: : isInit = False
: : def create():
: : mogno = MongoClient('mongo://127.0.0.1:27017', maxPoolSize=10)
: : return mogno
: : def mongoClient():
: : global isInit, instance
: : if isInit == False:
: : instance = create()
: : isInit = True
: : --- app.py
: : import mongoClient
: : mongoClient()
: : mongoClient()
: : mongoClient()
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 180.218.219.240 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Python/M.1615887411.A.F99.html
※ 編輯: zerof (180.218.219.240 臺灣), 03/16/2021 17:41:04
打字沒辦法表示語氣,有覺得冒犯的話先說個抱歉。
就原文的部份,我的看法是 1F 給的 singleton & after_create hook 這兩個關鍵字
就足以解決他的問題了。(當然他自己寫的 code 的 quality 是另一回事)
(以他的檔名`app.py` + db initial 的情況,沒意外會是 flask-like 的 web)
基本上我回文主要是基於你的內文 (會提到 multi-thread 的部份,一來是 link 中
的 `_RunningLoop` 是繼承自 threading.local ,二來是你原文內對 create method
「想不太到會導致重複」的補充說明。)
btw, link 稍微更新了一下,之前好像縮的時候沒縮到行號,在 L:694 左右。
當然我也不單純是無聊想糾正你,在假設他是用 flask 的情況下,在 local debug 的
時候就可以用 `app.run(threaded=True)` 來模擬(?) production 的情況,在文件內提
供的多數 deploy options (gevent, twisted, gunicorn...) 內都會有 multithreading
的 context (如果是用 Sanic 的話就更複雜了但我想會 Sanic 的不會問這種問題)
這些內容基本上用他用的 framework 當 keyword 加上 singleton/after_create hook
都會有些類似的 stackoverflow 可以研究參考。
(不過 flask 沒有 after_create hook ,當然你沒說我也沒必要特別提供正確的...
呃不是,就 keyword 自己研究下先搞清楚自己在問什麼說不定就解決了嘛)
我自己的想法很簡單,你懶我也懶,資訊給得少我就回少一點…會在網路上問問題的
人我自己是歸類成兩種,一種會符合 SSCCE(https://www.sscce.org/ ),要回問題就很
快;另一種就是給的通常都是片段的資訊,有時候自己也不知道自己在問什麼 (這種連
吐嘈都覺得好懶啊...)。
除此之外的共通點就是,會再給更多資訊的很少。 (有時候是自己想通了,有時候是
看了別人給的建議反而做了別的選擇之類的 blahblah)
這種行為就像是在丟 UDP 的 packets 一樣,沒有下文。
(反正我問題解了就好,回個感謝或是什麼之類的就再說)
也無所謂啦,反正我也是那種興致來了就回個文, keywords 都有大家自己研究研究
大概是這樣。最後還是回到一開頭那句,看文的覺得有冒犯就抱歉惹誤會誤會><
※ 編輯: zerof (180.218.219.240 臺灣), 03/18/2021 02:31:29
... <看更多>