Запустите несколько терминалов из скрипта Python и выполните команды (Ubuntu)

У меня есть текстовый файл, содержащий все элементы, которые необходимо удалить из онлайн-приложения. Каждый элемент, который необходимо удалить, должен быть отправлен по одному за раз. Чтобы ускорить процесс удаления, я разделяю элементы в текстовом файле на несколько текстовых файлов и запускаю скрипт на нескольких терминалах (~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 терминалов). Есть ли способ автоматизировать этот процесс или сделать его более эффективным?

Если для WitApiClient требуется терминал, он имеет серьезные недостатки.

tripleee 26.11.2022 08:15

@tripleee требует терминального значения?

Mritunjay Prasad 26.11.2022 08:22

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

tripleee 26.11.2022 08:25

Нет, мне не нужны отдельные терминалы для каждого потока, раньше я не использовал потоки, поэтому приходилось запускать одну и ту же программу с разных терминалов с измененным текстовым файлом, содержащим элементы, которые нужно удалить.

Mritunjay Prasad 26.11.2022 11:19
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
4
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я использовал потоки для одновременного запуска нескольких функций:

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()

Это сработало! У кого-нибудь есть другое решение, пожалуйста, напишите, или если тот же код можно написать более эффективно, пожалуйста, сообщите. Спасибо.

Другие вопросы по теме