Увеличьте скорость функции getfollowers - Instagram API - от LevPasha - PullRequest
0 голосов
/ 30 марта 2020
from InstagramAPI import InstagramAPI
import time
def getTotalFollowers(user_id):
   followers = []
   next_max_id = True
   while next_max_id:
      if next_max_id is True:
         next_max_id = ''
      _ = api.getUserFollowers(user_id, maxid=next_max_id)
      followers.extend(api.LastJson.get('users', []))
      next_max_id = api.LastJson.get('next_max_id', '')
   return followers


if __name__ == "__main__":
   #please enter your instagram username and password
   api = InstagramAPI("username","password")
   api.login()
   user_id = 6839180758
   start_time=time.time()
   followers = api.getTotalFollowers(user_id)
   print('Number of followers:', len(followers))
   print("Follower details are : "+str(followers))
   print("\n\nTotal time required : "+str(float(time.time())-float(start_time)))

Когда я пытаюсь выполнить этот код, я получаю общее время обработки около 3 сек c для 274 подписчиков

Может ли кто-нибудь применить многопроцессорность к это так, что этот код может быть выполнен быстро. О 1 se c для 274 подписчиков

При использовании любого из них -

  • Многопроцессорная обработка
  • asyncio module
  • PoolExecuter

Я просто хочу, чтобы код выполнялся быстро, вы можете делать с ним все что угодно.

Ps. Я новичок в python

Github ссылка для вышеуказанного кода - https://github.com/LevPasha/Instagram-API-python/blob/master/examples/user_followers.py

1 Ответ

0 голосов
/ 30 марта 2020
import threading
import numpy as np
di=dict()
def getTotalFollowers(*user_ids):
    for user_id in user_ids:
       followers = []
       next_max_id = True
        while next_max_id:
          if next_max_id is True:
            next_max_id = ''
            _ = api.getUserFollowers(user_id, maxid=next_max_id)
            followers.extend(api.LastJson.get('users', []))
            next_max_id = api.LastJson.get('next_max_id', '')
        di[user_id]=followers


threads =[]
user_id=[user_id1,user_id2,...]
chunks = [i.tolist() for i in np.array_split(links, 10) if i.size>0] #10 threads
for lst in chunks:
    threads.append(threading.Thread(target=getTotalFollowers, args=(lst)))

for x in threads:
   x.start()
for x in threads:
    x.join()
print(di)

это создаст 10 потоков, которые вы можете контролировать сумму при создании chunks

...