讓我先說我從未在 Python 中使用過執行緒。我有一個包含大約 8000 個字典的串列。它包含有關成分、卡路里、營養素等的資料。
for index in range(len(listOfFilteredFoods)):
for key in listOfFilteredFoods[index]:
if(listOfFilteredFoods[index][key] == None):
listOfFilteredFoods[index][key] = 0.0
requests.post(url, data=listOfFilteredFoods[index])
此回圈檢查是否有任何欄位(維生素 A、鉀或其他)等于 None,然后它只是用 0.0 覆寫 is。然后將每個字典發布到我的 Django 資料庫中。問題是這個 8k 串列需要大約 10 分鐘才能完成。如果我要使用執行緒,是否會有相同成分實體的重復?
編輯
有問題的字典看起來像這樣(縮寫):
[
{
"name": "#1 Ingredient name",
"calories": 100.0,
"nutrient#1": 10.0,
"nutrient#2": 20.0,
},
...
{
"name": "#8000 Ingredient name",
"calories": 100.0,
"nutrient#1": 10.0,
"nutrient#2": 20.0,
}
]
uj5u.com熱心網友回復:
顯然我無法對此進行測驗,但這種執行模式可能正是您所需要的。
import requests
from concurrent.futures import ThreadPoolExecutor
listOfFilteredFoods = [
{
"name": "#1 Ingredient name",
"calories": 100.0,
"nutrient#1": 10.0,
"nutrient#2": 20.0,
},
{
"name": "#8000 Ingredient name",
"calories": 100.0,
"nutrient#1": 10.0,
"nutrient#2": 20.0,
}
]
url = 'myFavouriteURL'
def doPOST(data):
with requests.Session() as session:
session.post(url, data=data).raise_for_status()
with ThreadPoolExecutor() as executor:
try:
for d in listOfFilteredFoods:
for k in d.keys():
if d[k] == None:
d[k] = 0.0
executor.submit(doPOST, d)
finally:
executor.shutdown(wait=True)
uj5u.com熱心網友回復:
2分。
1 - 如果您多次呼叫此回圈(例如:通過按鈕操作)執行緒將再次啟動。所以是的“會有相同成分的重復”
2 - 如果你只把這個回圈放在執行緒函式中,不,你不會“會有相同成分的重復”,因為執行緒將在“后臺”運行,但順序。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/408208.html
標籤:
