Запускать функцию для каждого элемента в списке одновременно с Python - PullRequest
0 голосов
/ 21 октября 2019

У меня есть список с более чем 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)

1 Ответ

0 голосов
/ 21 октября 2019

Вы не можете сделать 500 операций одновременно. Ваш компьютер является последовательным. Поток может помочь вам с более сложными операциями => Он будет выполнять процесс на каждом из ядер вашего ПК.

Похоже, вам нужно написать цикл for внутри другого цикла for.

Что именно вы хотите сделать с этими 500 элементами?

Может быть, вам нужно что-то подобное?:

for j in range(0, 500)
    for i in range(0,5000):
        result = list_of_values[j] + i
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...