python как запустить два скрипта одновременно
Одновременный запуск нескольких скриптов Python
Однако это тоже не работает.
Это весь сценарий. Он будет запускать два сценария Python одновременно.
Python мог бы сделать то же самое, но для этого потребовалось бы намного больше набора текста, и это плохой выбор для решения данной проблемы.
Я думаю, что возможно, что вы принимаете неправильный подход к решению своей проблемы, и мне хотелось бы услышать, к чему вы клоните.
Для более контролируемого способа параллельного запуска множества процессов загляните в проект Supervisor или используйте модуль многопроцессорности для оркестровки изнутри Python.
Я должен был это сделать и использовал подпроцесс.
Я делаю это в node.js (в Windows 10), открывая 2 отдельных экземпляра cmd и запуская каждую программу в каждом экземпляре.
Это имеет то преимущество, что запись в консоль легко видна для каждого скрипта.
Я вижу, что в python можно сделать то же самое: 2 оболочки.
Вы можете запускать несколько экземпляров оболочки IDLE / Python одновременно. Итак, откройте IDLE и запустите код сервера, а затем снова откройте IDLE, который запустит отдельный экземпляр, а затем запустит ваш клиентский код.
Я работаю в Windows 7 с Python IDLE. У меня две программы,
Я смотрю в это окно:
Я смотрю в это окно:
Вы можете использовать Gnu-Parallel для одновременного выполнения команд, работает в Windows, Linux / Unix.
На мой взгляд, самым простым способом было бы использовать PyCharm IDE и установить плагин multirun. Я пробовал множество решений, но в конце концов это сработало для меня!
Вы пробуете следующие способы запустить несколько скриптов Python:
Примечание. Выполнение нескольких скриптов зависит исключительно от подчеркнутой операционной системы, и оно не будет одновременным. Я был новичком в Python, когда ответил на него.
Обновление: я нашел пакет: https://pypi.org/project/schedule/ Вышеупомянутый пакет можно использовать для запуска нескольких скриптов и функций, проверьте это, и, возможно, в выходные также будет представлен какой-то пример.
Если вы хотите запустить два сценария Python параллельно, просто включите в конец сценария следующее:
Одновременное выполнение нескольких скриптов python
Я пробовал python script1.py script2.py и это не работает: запускается только первый сценарий. Кроме того, я пробовал использовать один такой файл;
однако это тоже не работает.
6 ответов
это весь сценарий. Он будет запускать два скрипта Python одновременно.
Python может сделать то же самое, но для этого потребуется гораздо больше ввода и это плохой выбор для проблемы.
Я думаю, что это возможно, хотя, что вы принимаете неправильный подход к решению вашей проблемы, и я хотел бы услышать, что вы имеете в виду.
самое простое решение для одновременного запуска двух процессов Python-запустить их из файла bash и сказать каждому процессу, чтобы перейти в фоновый режим с помощью & оператор Шелл.
для более контролируемого способа запуска многих процессов параллельно, посмотрите в руководитель проекта, или используйте модуль многопроцессорной для оркестровки изнутри Python.
Я работаю в Windows 7 С Python IDLE. У меня две программы,
Я смотрю на это окно:
Я смотрю на это окно:
теперь две простаивающие программы оболочки Python 3.6.3 работают одновременно, одна оболочка работает с progA, а другая-с progB.
можно использовать Gnu-Parallel для одновременного выполнения команд работает в Windows, Linux / Unix.
Я делаю это в узел.js (в Windows 10), открыв 2 отдельных экземпляра cmd и запустив каждую программу в каждом экземпляре.
Это имеет то преимущество, что запись на консоль легко видна для каждого скрипта.
Я вижу, что в python можно сделать то же самое: 2 оболочки.
вы можете одновременно запускать несколько экземпляров оболочки IDLE/Python. Поэтому откройте IDLE и запустите код сервера, а затем снова откройте IDLE, который запустит отдельный экземпляр, а затем запустите клиентский код.
попробуйте следующие способы запуска нескольких скриптов python:
Примечание: выполнение нескольких сценариев зависит от чисто подчеркнутой операционной системы, и это не будет одновременным, я был новичком в Python, когда я ответил на него.
Запускать несколько сценариев Python одновременно
Однако это тоже не работает.
8 ответов
Вот и весь сценарий. Он будет запускать два скрипта Python одновременно.
Python мог бы сделать то же самое сам, но это заняло бы намного больше времени, и это плохой выбор для рассматриваемой проблемы.
Я думаю, что возможно, что вы используете неправильный подход к решению вашей проблемы, и я хотел бы услышать, к чему вы клоните.
Я должен был сделать это и использовал подпроцесс.
Если вы хотите запустить два скрипта Python параллельно, просто включите следующее в конец скрипта:
На мой взгляд, самым простым способом было бы использовать PyCharm IDE и установить плагин ‘multirun’. Я попробовал много решений здесь, но это сработало для меня в конце концов!
Я делаю это в node.js (в Windows 10), открывая 2 отдельных экземпляра cmd и запуская каждую программу в каждом экземпляре.
Это имеет то преимущество, что запись в консоль легко видна для каждого сценария.
Я вижу, что в Python можно сделать то же самое: 2 оболочки.
Вы можете запустить несколько экземпляров оболочки IDLE / Python одновременно. Так что откройте IDLE и запустите код сервера, а затем снова откройте IDLE, который запустит отдельный экземпляр и затем запустит ваш клиентский код.
Я работаю в Windows 7 с Python IDLE. У меня есть две программы,
Я смотрю на это окно:
Я смотрю на это окно:
Для более контролируемого способа параллельного запуска многих процессов перейдите в проект Supervisor или воспользуйтесь модуль многопроцессорной обработки для организации внутри Python.
Одновременно запускать несколько скриптов python
Однако это тоже не работает.
ОТВЕТЫ
Ответ 1
Что все script. Он будет запускать два сценария Python в одно и то же время.
Python мог бы сделать то же самое, но потребовалось бы намного больше ввода текста и плохой выбор для этой проблемы.
Я думаю, что это возможно, хотя вы принимаете неправильный подход к решению своей проблемы, и я хотел бы услышать, что вы получаете.
Ответ 2
Для более контролируемого способа одновременного запуска нескольких процессов просмотрите проект Supervisor или используйте модуль многопроцессорности для организации изнутри Python.
Ответ 3
Я работаю в Windows 7 с Python IDLE. У меня две программы,
Ответ 4
Вы можете использовать Gnu-Parallel для одновременного запуска команд, работает в Windows, Linux/Unix.
Ответ 5
Я делаю это в node.js(в Windows 10), открывая 2 отдельных экземпляра cmd и запуская каждую программу в каждом экземпляре.
Это имеет то преимущество, что запись на консоль легко видна для каждого script.
Я вижу, что в python можно сделать то же самое: 2 оболочки.
Вы можете одновременно запускать несколько экземпляров оболочки IDLE/Python. Итак, откройте IDLE и запустите код сервера, а затем снова откройте IDLE, который запустит отдельный экземпляр, а затем запустит ваш код клиента.
Ответ 6
Если вы хотите запустить два скрипта Python параллельно, просто добавьте следующее в конец скрипта:
Ответ 7
Ответ 8
Я должен был сделать это и использовал подпроцесс.
Ответ 9
Вы пробуете следующие способы запуска нескольких скриптов Python:
Примечание. Выполнение нескольких сценариев зависит от чисто подчеркнутой операционной системы, и это не будет параллельным, я был новичком в Python, когда ответил на него.
Обновление: я нашел пакет: https://pypi.org/project/schedule/ Выше пакет может быть использован для запуска нескольких сценариев и функций, пожалуйста, проверьте это, и, возможно, на выходных также предоставит некоторый пример.
то есть: график импорта время импорта script1, script2
Учимся писать многопоточные и многопроцессные приложения на Python
Эта статья не для матёрых укротителей Python’а, для которых распутать этот клубок змей — детская забава, а скорее поверхностный обзор многопоточных возможностей для недавно подсевших на питон.
К сожалению по теме многопоточности в Python не так уж много материала на русском языке, а питонеры, которые ничего не слышали, например, про GIL, мне стали попадаться с завидной регулярностью. В этой статье я постараюсь описать самые основные возможности многопоточного питона, расскажу что же такое GIL и как с ним (или без него) жить и многое другое.
Python — очаровательный язык программирования. В нем прекрасно сочетается множество парадигм программирования. Большинство задач, с которыми может встретиться программист, решаются здесь легко, элегантно и лаконично. Но для всех этих задач зачастую достаточно однопоточного решения, а однопоточные программы обычно предсказуемы и легко поддаются отладке. Чего не скажешь о многопоточных и многопроцессных программах.
Многопоточные приложения
В Python есть модуль threading, и в нем есть все, что нужно для многопоточного программирования: тут есть и различного вида локи, и семафор, и механизм событий. Один словом — все, что нужно для подавляющего большинства многопоточных программ. Причем пользоваться всем этим инструментарием достаточно просто. Рассмотрим пример программы, которая запускает 2 потока. Один поток пишет десять “0”, другой — десять “1”, причем строго по-очереди.
Никакой магии и voodoo-кода. Код четкий и последовательный. Причем, как можно заметить, мы создали поток из функции. Для небольших задач это очень удобно. Этот код еще и достаточно гибкий. Допустим у нас появился 3-й процесс, который пишет “2”, тогда код будет выглядеть так:
Мы добавили новое событие, новый поток и слегка изменили параметры, с которыми
стартуют потоки (можно конечно написать и более общее решение с использованием, например, MapReduce, но это уже выходит за рамки этой статьи).
Как видим по-прежнему никакой магии. Все просто и понятно. Поехали дальше.
Global Interpreter Lock
Существуют две самые распространенные причины использовать потоки: во-первых, для увеличения эффективности использования многоядерной архитектуры cоврменных процессоров, а значит, и производительности программы;
во-вторых, если нам нужно разделить логику работы программы на параллельные полностью или частично асинхронные секции (например, иметь возможность пинговать несколько серверов одновременно).
В первом случае мы сталкиваемся с таким ограничением Python (а точнее основной его реализации CPython), как Global Interpreter Lock (или сокращенно GIL). Концепция GIL заключается в том, что в каждый момент времени только один поток может исполняться процессором. Это сделано для того, чтобы между потоками не было борьбы за отдельные переменные. Исполняемый поток получает доступ по всему окружению. Такая особенность реализации потоков в Python значительно упрощает работу с потоками и дает определенную потокобезопасность (thread safety).
Но тут есть тонкий момент: может показаться, что многопоточное приложение будет работать ровно столько же времени, сколько и однопоточное, делающее то же самое, или за сумму времени исполнения каждого потока на CPU. Но тут нас поджидает один неприятный эффект. Рассмотрим программу:
Эта программа просто пишет в файл миллион строк “1” и делает это за
0.35 секунды на моем компьютере.
Рассмотрим другую программу:
Эта программа создает 2 потока. В каждом потоке она пишет в отдельный файлик по пол миллиона строк “1”. По-сути объем работы такой же, как и у предыдущей программы. А вот со временем работы тут получается интересный эффект. Программа может работать от 0.7 секунды до аж 7 секунд. Почему же так происходит?
Это происходит из-за того, что когда поток не нуждается в ресурсе CPU — он освобождает GIL, а в этот момент его может попытаться получить и он сам, и другой поток, и еще и главный поток. При этом операционная система, зная, что ядер много, может усугубить все попыткой распределить потоки между ядрами.
UPD: на данный момент в Python 3.2 существует улучшенная реализация GIL, в которой эта проблема частично решается, в частности, за счет того, что каждый поток после потери управления ждет небольшой промежуток времени до того, как сможет опять захватить GIL (на эту тему есть хорошая презентация на английском)
«Выходит на Python нельзя писать эффективные многопоточные программы?», — спросите вы. Нет, конечно, выход есть и даже несколько.
Многопроцессные приложения
Для того, чтобы в некотором смысле решить проблему, описанную в предыдущем параграфе, в Python есть модуль subprocess. Мы можем написать программу, которую хотим исполнять в параллельном потоке (на самом деле уже процессе). И запускать ее в одном или нескольких потоках в другой программе. Такой способ действительно ускорил бы работу нашей программы, потому, что потоки, созданные в запускающей программе GIL не забирают, а только ждут завершения запущенного процесса. Однако, в этом способе есть масса проблем. Основная проблема заключается в том, что передавать данные между процессами становится трудно. Пришлось бы как-то сериализовать объекты, налаживать связь через PIPE или друге инструменты, а ведь все это несет неизбежно накладные расходы и код становится сложным для понимания.
Здесь нам может помочь другой подход. В Python есть модуль multiprocessing. По функциональности этот модуль напоминает threading. Например, процессы можно создавать точно так же из обычных функций. Методы работы с процессами почти все те же самые, что и для потоков из модуля threading. А вот для синхронизации процессов и обмена данными принято использовать другие инструменты. Речь идет об очередях (Queue) и каналах (Pipe). Впрочем, аналоги локов, событий и семафоров, которые были в threading, здесь тоже есть.
Кроме того в модуле multiprocessing есть механизм работы с общей памятью. Для этого в модуле есть классы переменной (Value) и массива (Array), которые можно “обобщать” (share) между процессами. Для удобства работы с общими переменными можно использовать классы-менеджеры (Manager). Они более гибкие и удобные в обращении, однако более медленные. Нельзя не отметить приятную возможность делать общими типы из модуля ctypes с помощью модуля multiprocessing.sharedctypes.
Еще в модуле multiprocessing есть механизм создания пулов процессов. Этот механизм очень удобно использовать для реализации шаблона Master-Worker или для реализации параллельного Map (который в некотором смысле является частным случаем Master-Worker).
Из основных проблем работы с модулем multiprocessing стоит отметить относительную платформозависимость этого модуля. Поскольку в разных ОС работа с процессами организована по-разному, то на код накладываются некоторые ограничения. Например, в ОС Windows нет механизма fork, поэтому точку разделения процессов надо оборачивать в:
Впрочем, эта конструкция и так является хорошим тоном.
Для написания параллельных приложений на Python существуют и другие библиотеки и подходы. Например, можно использовать Hadoop+Python или различные реализации MPI на Python (pyMPI, mpi4py). Можно даже использовать обертки существующих библиотек на С++ или Fortran. Здесь можно было упомянуть про такие фреймфорки/библиотеки, как Pyro, Twisted, Tornado и многие другие. Но это все уже выходит за пределы этой статьи.
Если мой стиль вам понравился, то в следующей статье постараюсь рассказать, как писать простые интерпретаторы на PLY и для чего их можно применять.