python - 使用 Python 同时为列表中的每个项目运行一个函数
问题描述
我有一个包含 500 多个元素的列表,我想同时为列表中的每个元素运行一个函数,我该怎么做?
该解决方案将加快该过程,而且我的代码会更短。
我为 Instagram 使用了一个库,并且从该库中获取值需要很多时间。我已经用线程管理了它的速度,但我正在处理列表中的大量值。每个元素都是一个用户名,所以我想同时访问 500 个用户的个人资料并从中收集一些数据(发布图片、评论数量、喜欢的数量......)。
对于每个用户,收集数据大约需要 1-2 秒。这意味着为 1000 个用户收集数据将需要 1000-2000 秒。所以我试图通过对列表中的每个项目同时运行相同的函数来加快速度。
我正在阅读一些关于threading
并且我做了这样的事情,但是如果我在列表中有 500 个元素怎么办:
import threading
list_of_results = []
list_of_values = [1,2,3]
def one(list_of_values, list_of_results):
result = 0
for i in range(0,5000):
result = list_of_values[0] + i
list_of_results.append(result)
def two(list_of_values, list_of_results):
result = 0
for i in range(0,5000):
result = list_of_values[1] + i
list_of_results.append(result)
def three(list_of_values, list_of_results):
result = 0
for i in range(0,5000):
result = list_of_values[2] + i
list_of_results.append(result)
t1 = threading.Thread(target = one, args = (list_of_values, list_of_results))
t2 = threading.Thread(target = two, args = (list_of_values, list_of_results))
t3 = threading.Thread(target = three, args = (list_of_values, list_of_results))
t1.start()
t2.start()
t3.start()
t1.join()
t2.join()
t3.join()
print(list_of_results)
解决方案
您不能一次执行 500 次操作。您的 PC 是连续的。线程可能会帮助您进行更复杂的操作 => 它会在您的每个 PC 内核上创建一个进程。
看起来您需要在另一个 for 循环中编写一个 for 循环。
你到底想用这 500 个元素做什么?
也许你需要这样的东西?:
for j in range(0, 500)
for i in range(0,5000):
result = list_of_values[j] + i
推荐阅读
- flutter - 在什么情况下应该使用 listview 而不是 listview.builder?
- sql-server - SQL Server db_datareader 无法将表编写为脚本,缺少什么权限?
- node.js - mustache 可以多次渲染 html 的图片吗?
- c++ - C++Builder 中的 OnClick 事件签名问题
- java - 相邻元素的最小绝对差并计算总和
- spring-cloud - 如何为在 SAME Eureka 服务下注册的每个实例配置单独的弹性 4j 断路器
- spring - 在 Spring Boot 中捕获 CharConversionException
- c - 在C中打印和排序txt文件
- android - Flutter - 如何解析带有列表的嵌套 JSON 结构?
- git - 将我的 repo 分叉与原始 repo 同步