首页 > 解决方案 > 使用 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)

标签: pythonmultithreadingmultiprocessing

解决方案


您不能一次执行 500 次操作。您的 PC 是连续的。线程可能会帮助您进行更复杂的操作 => 它会在您的每个 PC 内核上创建一个进程。

看起来您需要在另一个 for 循环中编写一个 for 循环。

你到底想用这 500 个元素做什么?

也许你需要这样的东西?:

for j in range(0, 500)
    for i in range(0,5000):
        result = list_of_values[j] + i

推荐阅读