Image

Imagekkirsanov wrote in Imageru_python

Category:

Несколько независимых скриптов.

Есть С++ный прожект. В нутри у него куча модулей генерирующих и обрабатывающих драные (для простоты - пусть пока целые числа); GUI к нему выглядит как датафлоу граф, где узлы это модули а ребра - потоки данных.

Хотелось бы дать юзерам возможность вставлять собственные узлы-модули, тут же программируемые на питоне.

Т.е. пользователь тыкает мышкой, добавляет модуль "Python processing" и тут же в в окошке пишет микропрограмму: "outData = inputData +1" и больше ничего. В результате получается модуль, увеличивающий все проходящие через него числа на 1.

Одновременно(параллельно?) будет работать до 100 таких питоновских модулей с частотой не более 100 герц(если удаться обеспечить больше никто не обидится).

Вопросы:
1) Как изолировать друг от друга эти микропрограммы? Т.е. что бы "i=1" в одном не перекрывало "i=2" в другом. (каждый модуль в отдельном питоновском модуле со своим пространсвом имен? Py_NewInterpreter()? или же создать несколько тредов, в каждом из которых Py_Initialize()?)питоновском модуле со своим пространсвом имен?)

2) Как тут с параллельным исполнением пары десятков таких микропрограмм? Можно ли это сделать в рамках одного инстанса питона, или же придётся сделать несколько потоков, в каждом их которых вызывать Py_Initialize()(да и создаст ли это новый интерпретатор в потоке)?
3) Грозит ли мне GIL, если эти "микропрограммы" работают с разными данными?

4) Какие подводные камни ожидать?