Запуск как можно большего числа экземпляров программы

#python #multithreading #process #multiple-instances

#python #многопоточность #процесс #multiple-instances

Вопрос:

Я пытаюсь реализовать некоторый код для импорта пользовательских данных из другого сервиса через API сервиса. Я собираюсь настроить это так, чтобы все задания запроса хранились в очереди, из которой будет извлекаться моя простая программа-импортер. Обработка одной задачи за раз не приблизится к максимальному использованию каких-либо ресурсов компьютера, поэтому мне интересно, каков стандартный способ структурирования программы для одновременного выполнения нескольких «заданий»? Должен ли я изучать потоковую обработку или, возможно, программу, которая извлекает задания из очереди и запускает экземпляры программы-импортера? Спасибо за помощь.

РЕДАКТИРОВАТЬ: То, что у меня есть прямо сейчас, написано на Python, хотя я открыт для переписывания его на другой язык, если потребуется.

Комментарии:

1. То, что у меня есть прямо сейчас, написано на python, хотя я был бы открыт для переноса его на что-то другое, если это что-то изменит.

2. В чем узкое место? Действительно ли это проблема, связанная с процессором?

Ответ №1:

Используйте очередь производитель-потребитель с таким количеством потоков-потребителей, сколько вам нужно для оптимизации использования ресурсов на хосте (извините — это очень расплывчатый совет, но «правильное число» зависит от проблемы).

Если запросы невелики, вам вполне может понадобиться только один поток-производитель для их обработки.

Запуск нескольких процессов тоже может сработать — лучший выбор зависит от ваших требований. Вам нужно, чтобы производитель знал, сработала ли операция, или это «запустить и забыть»? Нужна ли вам логика повторных попыток в случае сбоя? Как вы ведете подсчет одновременных потребителей в этой модели? И так далее.

Для Python взгляните на это.

Комментарии:

1. Спасибо Стиву за ответ. Не беспокойтесь, я не ожидал точного количества потоков и т.д. Я работаю над веб-сервисом, поэтому мой план состоял в том, чтобы мой сервис добавлял задания в SQS от Amazon (Simple Queuing Service). Служба очередей). Затем моя программа-импортер была бы запущена на сервере, извлекающем данные из SQS. Мне действительно нужно убедиться, что задания выполнены успешно. Итак, вы думаете, я должен запустить один экземпляр программы и заставить его опрашивать задания из очереди и просто запускать угрозу для каждого задания до некоторого заданного количества потоков?

2. Если вам нужен жесткий контроль над потребителями, я думаю, потоки будут проще, чем отдельные процессы. В конце концов, у вас всего лишь два типа потоков. С этим относительно просто справиться. В Java и C # есть встроенные очереди, которые вы можете использовать для соединения производителя с потребителями.