Steam API からインベントリ データを取得するスクリプトを作成しましたが、速度に少し不満があります。だから私はPythonでのマルチプロセッシングについて少し読んだだけで、頭を包み込むことができません。このプログラムは次のように動作します。リストから SteamID を取得し、インベントリを取得してから、ID をキー、インベントリの内容を値として、SteamID とインベントリをディクショナリに追加します。
また、マルチプロセッシング時にカウンターを使用することに関連するいくつかの問題があることも理解しました。これは、最初からではなく、最後に取得したインベントリからプログラムを再開できるようにしたいため、小さな問題です。
とにかく、私が求めているのは、インベントリ データを含む URL を開くときにマルチプロセッシングを実行して、プログラムが一度に 1 つではなく複数のインベントリを取得できるようにする方法の具体的な例です。
コードに:
with open("index_to_name.json", "r", encoding=("utf-8")) as fp:
index_to_name=json.load(fp)
with open("index_to_quality.json", "r", encoding=("utf-8")) as fp:
index_to_quality=json.load(fp)
with open("index_to_name_no_the.json", "r", encoding=("utf-8")) as fp:
index_to_name_no_the=json.load(fp)
with open("steamprofiler.json", "r", encoding=("utf-8")) as fp:
steamprofiler=json.load(fp)
with open("itemdb.json", "r", encoding=("utf-8")) as fp:
players=json.load(fp)
error=list()
playerinventories=dict()
c=127480
while c<len(steamprofiler):
inventory=dict()
items=list()
try:
url=urllib.request.urlopen("http://api.steampowered.com/IEconItems_440/GetPlayerItems/v0001/?key=DD5180808208B830FCA60D0BDFD27E27&steamid="+steamprofiler[c]+"&format=json")
inv=json.loads(url.read().decode("utf-8"))
url.close()
except (urllib.error.HTTPError, urllib.error.URLError, socket.error, UnicodeDecodeError) as e:
c+=1
print("HTTP-error, continuing")
error.append(c)
continue
try:
for r in inv["result"]["items"]:
inventory[r["id"]]=r["quality"], r["defindex"]
except KeyError:
c+=1
error.append(c)
continue
for key in inventory:
try:
if index_to_quality[str(inventory[key][0])]=="":
items.append(
index_to_quality[str(inventory[key][0])]
+""+
index_to_name[str(inventory[key][1])]
)
else:
items.append(
index_to_quality[str(inventory[key][0])]
+" "+
index_to_name_no_the[str(inventory[key][1])]
)
except KeyError:
print("keyerror, uppdate def_to_index")
c+=1
error.append(c)
continue
playerinventories[int(steamprofiler[c])]=items
c+=1
if c % 10==0:
print(c, "inventories downloaded")
私の問題が明確であることを願っています。それ以外の場合は、明らかにそう言ってください。サードパーティのライブラリの使用を最適に回避しますが、それが不可能な場合は不可能です。前もって感謝します