У меня есть программа на C++, которую мне нужно запускать несколько раз. Например:- Запустите./addTwoNumbers 50 раз.
Какой будет хороший подход для решения этой проблемы?
user939780 17 сен ’11 в 02:28 2011-09-17 02:28
2011-09-17 02:28
4 ответа
В оболочках POSIX,
for i in ; do ./addTwoNumbers ; done
user937551 17 сен ’11 в 02:32 2011-09-17 02:32
2011-09-17 02:32
То, как вы задавали вопрос, показало, что у вас есть готовый двоичный файл. Вы хотите запустить его, как если бы он был из командной строки. Прямой слеш, для меня, является подсказкой, что вы являетесь пользователем Unix-подобной операционной системы.
Ну, это и тот факт, что этот пост помечен как «Unix», который я только что увидел после написания ниже. Все должно быть применимо.
Схема использования оболочки, вероятно, самая простая.
Man Bash расскажет вам, как написать сценарий оболочки. На самом деле нам нужно выяснить, какую оболочку вы используете. В командной строке введите:
Как сбросить пароль разблокировки на iPhone
echo $SHELL The response I get is /bin/bash
Это означает, что я работаю с Bash. Что бы вы ни получили, скопируйте, вам это понадобится позже.
Абсолютно самая низкая база знаний — просто создать файл с любым стандартным текстовым редактором и без суффикса. Назовите это просто (например) run50.
Первая строка — это специальная строка, которая указывает системе Unix использовать bash для запуска команды:
#! /bin/bash (or whatever you got from echo $SHELL).
Теперь в файле на следующей строке введите полный путь от root до исполняемого файла. Введите команду так же, как если бы вы вводили ее в командной строке. Вы также можете поместить любые аргументы в свою программу.
Сохраните свой файл.
Вы хотите запустить программу и дождаться ее завершения, а затем запустить следующую копию? Или вы хотите запустить его в 50 раз быстрее, не дожидаясь его окончания? Если первое, вы сделали, если второе, завершите строку с i<=50;i++)) do echo «Invocation $i» /complete/path/to/your/command done
Я включил сообщение, которое говорит вам, какой запуск команды включен. Если вы рассчитываете программу, я бы не рекомендовал такое сообщение. Вы можете завершить строку символом i<=50;i++)) do echo «invocation $i» https://stackru.com/questions/29860597/zapusk-programmyi-na-c-neskolko-raz» target=»_blank»]stackru.com[/mask_link]
Запуск exe файла много раз параллельно
Всем привет, есть файл .exe который выполняется +- 10 секунд, запускать этот файл обычным циклом очень долго, так как запустить его нужно много раз. Я решил использовать потоки для этого:
import subprocess import threading mutex = threading.Lock() i = 0 def worker(): global i while True: mutex.acquire() i += 1 mutex.release() cmd = f»C:\Users\123\Desktop\main.exe» returned_output = str(subprocess.check_output(cmd)) print(returned_output) def run_workers(count): threads = [threading.Thread(target=worker) for i in range(0, count)] for thread in threads: thread.start() # каждый поток должен быть запущен for thread in threads: print(«Поток завершился») thread.join() # дожидаемся исполнения всех потоков if __name__ == «__main__»: run_workers(50)
main.exe не сильно нагружает компьютер, по этому 50 потоков нагрузит на 20% компьютер. Проблема в том что, когда запускаешь, он все равно медленно работает, а в диспетчере задач показано что запущено 3-4 main.exe. В чем проблема? почему вместо 50 запускается 3-4 main.exe, и к тому же через время и они останавливаются.
Как запустить программу оздоровления человека?
Отслеживать
46.2k 16 16 золотых знаков 55 55 серебряных знаков 96 96 бронзовых знаков
задан 2 фев в 12:35
5 1 1 бронзовый знак
А вы уверены, что ваш main.exe в принципе позволяет запускать себя несколько раз?
2 фев в 13:11
main.exe это моя программа на go lagn
2 фев в 13:27
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Попробуйте через asyncio вместо threading :
import asyncio i = 0 async def worker(): global i while True: i += 1 cmd = «C:\Users\123\Desktop\main.exe» proc = await asyncio.create_subprocess_shell( cmd, stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE ) stdout, stderr = await proc.communicate() print(f'[ exited with ]’) if stdout: print(f'[stdout]n’) if stderr: print(f'[stderr]n’) async def run_workers(count): workers = [worker() for i in range(0, count)] await asyncio.gather(*workers) if __name__ == «__main__»: asyncio.run(run_workers(50))
Вариант реализации в одном потоке и без асинхронности, просто в бесконечном цикле проверяем состояние процессов через Popen.poll() , поддерживаем количество живых процессов равным count :
import subprocess import time cmd = «C:\Users\123\Desktop\main.exe» def run_workers(count): processes = [] while True: alive_processes = [] # Вывод результата завершенных процессов, оставляем в списке только живые процессы for proc in processes: if proc.poll() is None: alive_processes.append(proc) else: stdout, stderr = proc.communicate(input=None, timeout=None) print(f'[ exited with ]’) if stdout: print(f'[stdout]n’) if stderr: print(f'[stderr]n’) processes = alive_processes # Если живых процессов меньше count, запускаем дополнительные for _ in range(len(alive_processes), count): processes.append(subprocess.Popen([cmd])) time.sleep(0.1) if __name__ == «__main__»: run_workers(50)
Источник: ru.stackoverflow.com
Как запустить программу много раз
Мои вопрос никак не относится к программированию, но все же мне нужна помощь людей занимающихся в этой сфере.
Как мне запустить одно и тоже приложение несколько раз? Например, программу «блокнот» я могу открыть сколько угодно раз, а программа «opera», при повторном открытии выдает уведомление о том, что приложение уже запущено и повторно запускаться оно не будет.
Дело в том, что есть одно приложение на платформе Windows Mobile 6.5, которое отказывается запускаться повторно.
А данное приложение мне нужно для реализации своих идей над новым интерфейсом моего смартфончика
Отчего это зависит? Как это обойти?
Пробывал переименовывать файлы, запускать их из других папок, но ничего не выходит.
Регистрация: 03.01.2011
Сообщений: 2,508
> Отчего это зависит?
от воли программиста
в общем случае никак (если не рассматривать взлом и модификацию бинарника)
«Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего.»
Регистрация: 04.09.2011
Сообщений: 2
veniside
Огромное спасибо за подсказку
«если не рассматривать взлом и модификацию бинарника»
Пришла идея редактировать содержимое программы через «Restorator», переименовал там некоторые данные. Оказывается, что в памяти (платформы WM) была недопустима работа процессов с одинаковымы именами
Теперь копии приложения запускаю под разными названиями.
Еще раз спасибо!
Проблему решил
Источник: www.programmersforum.ru