У меня есть текстовый файл, содержащий все элементы, которые необходимо удалить из онлайн-приложения. Каждый элемент, который необходимо удалить, должен быть отправлен по одному за раз. Чтобы ускорить процесс удаления, я разделяю элементы в текстовом файле на несколько текстовых файлов и запускаю скрипт на нескольких терминалах (~130, чтобы время удаления составляло менее 30 минут для ~7000 элементов).
Это код скрипта удаления:
from fileinput import filename
from WitApiClient import WitApiClient
import os
dirname = os.path.dirname(__file__)
parent_dirname = os.path.dirname(dirname)
token = input("Enter the token")
file_name = os.path.join(parent_dirname, 'data/deletion_pair.txt')
with open(file_name, encoding = "utf-8") as file:
templates = [line.strip() for line in file.readlines()]
for template in templates:
entity, keyword = template.split(", ")
print(entity, keyword)
resp = WitApiClient(token).delete_keyword(entity, keyword)
print(resp)
Итак, я делю элементы в файле deletion_pair.txt и запускаю этот скрипт несколько раз в новых терминалах (~130 терминалов). Есть ли способ автоматизировать этот процесс или сделать его более эффективным?
@tripleee требует терминального значения?
Если код действительно требует, чтобы вы открывали отдельный терминал для каждого потока.
Нет, мне не нужны отдельные терминалы для каждого потока, раньше я не использовал потоки, поэтому приходилось запускать одну и ту же программу с разных терминалов с измененным текстовым файлом, содержащим элементы, которые нужно удалить.
Я использовал потоки для одновременного запуска нескольких функций:
from fileinput import filename
from WitApiClient import WitApiClient
import os
from threading import Thread
dirname = os.path.dirname(__file__)
parent_dirname = os.path.dirname(dirname)
token = input("Enter the token")
file_name = os.path.join(parent_dirname, 'data/deletion_pair.txt')
with open(file_name, encoding = "utf-8") as file:
templates = [line.strip() for line in file.readlines()]
batch_size = 20
chunks = [templates[i: i + batch_size] for i in range(0, len(templates), batch_size)]
def delete_function(templates, token):
for template in templates:
entity, keyword = template.split(", ")
print(entity, keyword)
resp = WitApiClient(token).delete_keyword(entity, keyword)
print(resp)
for chunk in chunks:
thread = Thread(target=delete_function, args=(chunk, token))
thread.start()
Это сработало! У кого-нибудь есть другое решение, пожалуйста, напишите, или если тот же код можно написать более эффективно, пожалуйста, сообщите. Спасибо.
Если для
WitApiClient
требуется терминал, он имеет серьезные недостатки.