В НЕ блокирующем режиме выполнения Python скриптов дает возможность одновременно выполнять различные задачи.
Для взаимодействия с Кибор можно использовать какое либо сообщение, которое каждый экземпляр Python отправит по завершению своей задачи.
Применение:
Хорошо подходит к примеру для многопроцессорного, параллельного парсинга различных сайтов и других задач, которые мало зависимы друг от друга.
В многопроцессорном режиме одноименные переменные Python являются уникальными для каждого процесса и невидимы в других.
Обмен данными между процессами можно легко организовать через Кибор.
Для запуска отдельного процесса Python используется та же функция
runpython
В виде единственного параметра надо передать константу ARRAY
Значение данной константы = -1
Данный код запустит три процесса Python
Цитата:
runpython(ARRAY);
runpython(ARRAY);
runpython(ARRAY);
runpython(ARRAY);
runpython(ARRAY);
При вызове runpython с параметром ARRAY, она возвращает количество запущенных Python.
При первом вызове вернет 1, при втором 2 и так далее.
=========================================
Для одновременного использования множества запущенных процессов Python необходимо выполнять в них скрипт в НЕ блокирующем режиме.
Не блокирующий режим программируется с помощью функций
sendpython
getpython
и директив
__python
#скрипт Python
__end_python
Подробнее о этих функциях - Выполнение скриптов Python в Кибор
Но никто не мешает использовать Блокирующие функции и директивы
sendgetpython
__python_sync
__end_python
Но в этом случае Кибор будет ждать пока этот экземпляр Python не закончит работу со скриптом.
==========================================
Для выбора номера экземпляра Python, к которому относится передаваемые команды используется функция
selectpython(0);
В виде параметра принимает номер запущенного экземпляра Python. Начиная с 0.
Если указать selectpython(); без параметра, будет переключение на основной Python (если он был запущен с помощью функции runpython();
Использовать selectpython(0); selectpython(1); и т.д. можно для директив
__python
__end_python
__python_sync
__end_python
и функций
sendpython
getpython
sendpython
Для переключения между экземплярами Python.
Вызвать функцию selectpython с номером экземпляра Python достаточно один раз.
Все команды будут идти этому экземпляру, пока не вызовется selectpython с другим номером.
Кроме этого для функций
sendpython
getpython
sendpython
можно не использовать переключение с помощью selectpython, если номер экземпляра Python указать в них последним, не обязательным параметром.
при указание этого параметра эти функции будут игнорировать на какой номер переключен selectpython и отсылать команду экземпляру, номер которого указан этим параметром.
Пример стандартного вызова этих функций:
CODE:
sendpython("print(^'yes^')");
getpython();
sendgetpython("print(^'yes^')");
getpython();
sendgetpython("print(^'yes^')");
Пример указания последнего, не обязательного параметра для выбора номера экземпляра Python:
CODE:
sendpython("print(^'yes^')", 1);
getpython(1);
sendgetpython("print(^'yes^')", 1);
getpython(1);
sendgetpython("print(^'yes^')", 1);
Так же можно не указывать номер в функциях, а переключаться так:
CODE:
selectpython(1);
sendpython("print(^'yes^')");
getpython();
sendgetpython("print(^'yes^')");
selectpython(2);
sendpython("print(^'yes^')");
getpython();
sendgetpython("print(^'yes^')");
sendpython("print(^'yes^')");
getpython();
sendgetpython("print(^'yes^')");
selectpython(2);
sendpython("print(^'yes^')");
getpython();
sendgetpython("print(^'yes^')");
==============================================================
Для использования директив
__python
__end_python
и
__python_sync
__end_python
Переключение с помощью selectpython обязательно для выбора экземпляра Python.
================================================================
closepython закрывает ВСЕ запущенные процессы Python
Пример использования:
не забудьте установить пробелы
Запуск 20 процессов, каждый из которых выполняет свою часть работы.
Много процессорный режим (Отобразить)
Запуск одного процесса который делает всю работу сам (Отобразить)