Сбор данных для циклов происходит медленно Python (добавление) - PullRequest
0 голосов
/ 29 апреля 2020

извините за любую ошибку, но мой родной язык - испанец sh. У меня есть следующий вопрос, в показанном коде я делаю сбор данных и затем помещаю их в пустые массивы с помощью .append, но для запуска программы требуется много времени (около 20 секунд), есть ли способ улучшить скорость? Спасибо.

Важно отметить, что используемые данные поступают в формате JSON из API. Из этого JSON формата собирается приблизительно 100 var, а затем снова поступают запросы к тому же API с другими ответами, и данные 100 var собираются снова. Я немного новичок в Python.

try:
    data_meli = get_data_meli(country,query) #FUNCTION GET FIRST JSON (CONTAIN DATA FOR THE LOOP common_array)
except Exception as e:
    raise e

def common_array():
    try:
        if data_meli is not None:
            for product in data_meli['results']:
                if (product['price']) == None or (product['sold_quantity']) == None or (product['condition']) == None:
                    continue
                print(product['title'])
                response_item = json.loads(meli.get("/items/{}".format(product['id'])).content)
                response_reviews = json.loads(meli.get("reviews/item/{}".format(product['id'])).content)
                response_visits = json.loads(meli.get("/items/{}/visits/time_window?last={}&unit=day".format(product['id'],10)).content) #VISITA ULT 10 DIAS
                response_seller = json.loads(meli.get("/users/{}".format(product['seller']['id'])).content)

                sold_quantity.append(product['sold_quantity'])

                if (product['condition']) == "new":
                    condition.append(1)
                else:
                    condition.append(0)

                try:

                    start_time_day = response_item['start_time'].split("T")[0] if response_item['start_time'].split("-")[0] else start_time_x == '2020-01-01' 
                    start_time_day = datetime.strptime(start_time_day, format_time)
                    time_publish_days = (((today - start_time_day).days) + 1)
                    start_time.append(time_publish_days)


                    level_seller = response_seller['seller_reputation']['level_id']
                    if level_seller == "5_green":
                        level_seller = 5

                    elif level_seller == "4_light_green":
                        level_seller = 4

                    elif level_seller == "3_yellow" and response_seller['points'] > 500:
                        level_seller = 3

                    else:
                        level_seller = 0
                    seller_reputation.append(level_seller) if level_seller else seller_reputation.append(0)


                    paging_total_reviews.append(response_reviews['paging']['total']) if response_reviews['paging']['total'] else paging_total_reviews.append(0)


                    total_visits.append(response_visits['total_visits'])

Примерные данные JSON в основном:

 "results": [
    {
      "id": "MLA851129570",
      "site_id": "MLA",
      "title": "Motorola Moto G G6 Plus 64 Gb Índigo Oscuro 4 Gb Ram",
      "seller": {},
      "price": 27510,
      "currency_id": "ARS",
      "available_quantity": 1,
      "sold_quantity": 3
     }
     {
      "id": "MLA846452841",
      "site_id": "MLA",
      "title": "Motorola Moto G G6 Play 32 Gb Índigo Oscuro 3 Gb Ram",
      "seller": {},
      "price": 19534,
      "currency_id": "ARS",
      "available_quantity": 1,
      "sold_quantity": 2,
      }
.
.
.
. 
data more 1k items
]

Результат, который я ожидаю, - это та информация, которая ей требуется и какая добавляются (добавляются) в пустые массивы, такие как sold_quantity, start_time и другие. Итак, договоримся с желаемой информацией.

add 30/04/2020

Это пример результата (10 единиц), и желательно, чтобы он был в кратчайшие сроки (между 1 и 3 секунды), но для 100 единиц.

{'sold_quantity': [25, 25, 5, 4, 4, 2, 5, 5, 100, 25], 'condition': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], 'start_time': [430, 116, 827, 616, 31, 286, 778, 777, 116, 116], 'seller_reputation': [5, 4, 5, 5, 4, 5, 4, 4, 4, 4], 'paging_total_reviews': [2, 0, 0, 0, 0, 0, 2, 0, 0, 0],'total_visits': [8, 151, 54, 10, 90, 6, 61, 136, 95, 69]}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...