Можно ли использовать потоки при добавлении / удалении пользователей из аудитории AdWords через их Python SDK? - PullRequest
0 голосов
/ 03 октября 2019

Я пытаюсь обновить некоторые аудитории (электронные письма / телефонные совпадения) с BigQuery до Google Ads с помощью UserListService. Я делю их на части, беря по 1 млн порций строки за раз (очевидно, лимит) из кадра данных результата запроса,но иногда последовательная загрузка этих чанков занимает много времени.

Я пытался выяснить, могу ли я загрузить некоторые из них одновременно и получить некоторые ошибки XML_STREAM_EXC, я не мог найти много об этой ошибке, но так как все работает без многопоточностиЯ полагаю, что это связано с попытками сделать многое для API, или с некоторой ошибкой в ​​коде с моей стороны. Возможен ли этот многопоточный подход? Или, альтернативно, есть ли другой способ получить тот же результат (более быстрая загрузка)? Вот то, что я получил, что не сработало.

# here's what we're going to do to each chunk
def google_stuff(chunkStart,chunkEnd):
    add_to_audience = gAudienceService.mutateMembers([{'operand': {'userListId': this_audience_id,'membersList': [json.loads(x) for x in add_query_data[chunkStart:chunkEnd].to_dict(orient='list')['GOOGLE']]},'operator': 'ADD'}])

# Chunk up the volume
chunkStart = 0
chunkIncrement = 1000000
chunkEnd = chunkStart+chunkIncrement
threads = []
counter = 0

# make some threads
while True:
    if add_len > 0 and chunkStart < add_len:
        this_thread_name = 'add_users_'+str(counter)
        this_thread = threading.Thread(name=this_thread_name, target=google_stuff, args=(chunkStart,chunkEnd,))
        threads.append(this_thread)
        this_thread.start()
        time.sleep(5)
        chunkStart += chunkIncrement
        chunkEnd += chunkIncrement
        counter += 1
    else:
        break


# wait till they all finish
for t in threads:
    t.join()
...