【发布时间】:2020-07-30 05:44:18
【问题描述】:
为了详细了解,我附上了文件链接: Actual file
我在列表中有数据,其语法类似:
i = [a.b>c.d , e.f.g>h.i.j ]
例如列表的每个元素都有多个用“.”分隔的子元素。和“>”。
for i in range(0, len(l)):
reac={}
reag={}
t = l[i].split(">")
REAC = t[0]
Reac = REAC.split(".")
for o in range(len(Reac)):
reaco = "https://ai.chemistryinthecloud.com/smilies/" + Reac[o]
respo = requests.get(reaco)
reac[o] ={"Smile":Reac[o],"Details" :respo.json()}
if (len(t) != 1):
REAG = t[1]
Reag = REAG.split(".")
for k in range(len(Reag)):
reagk = "https://ai.chemistryinthecloud.com/smilies/" + Reag[k]
repo = requests.get(reagk)
reag[k] = {"Smile": Reag[k], "Details" :repo.json()}
res = {"Reactants": list(reac.values()), "Reagents": list(reag.values())}
boo.append(res)
else:
res = {"Reactants": list(reac.values()), "Reagents": "No reagents"}
boo.append(res)
我们已经分离了所有元素,并且对于每个元素,我们都调用了 3rd 方 API。这太浪费时间了。
有什么办法可以减少这个时间并针对循环进行优化?
回复大约需要 1 分钟。我们希望优化到 5-10 秒。
【问题讨论】:
-
如果你想减少 API 调用的数量,你可能只能通过缓存结果来做到这一点(例如,不要调用
K两次),并通过并行运行(线程很好) .您的循环几乎肯定不会对任何事情产生影响。 -
但问题在于时间复杂度。它具有 MxN 时间复杂度,并且 API 调用也需要额外的时间。我们想减少它。
-
你能帮忙实现线程吗?
-
你没有有
O(m*n)复杂度,你有O(k)复杂度。您对字符串中的每个元素进行 api 调用,拆分和循环具有“字面上”的零影响。我的建议是对字符串中的每个唯一元素并行执行一次 api 调用,这是您最终可以做到的最快速度。如果你持久化缓存,它甚至会让你的计算瞬间完成。 -
你能帮我写代码吗@cireo