Проблема параллелизма API Python-C

Мы разрабатываем небольшое серверное приложение c. Серверное приложение выполняет некоторую обработку данных и отвечает клиенту. Чтобы часть обработки данных оставалась настраиваемой и гибкой, мы решили использовать сценарии и, исходя из доступности различных готовых модулей, решили перейти на Python. Мы используем API Python-C для отправки / получения данных между c и python.

Алгоритм работает примерно так: -

  1. Сервер получает некоторые данные от клиента, эти данные хранятся в словаре, созданном в c. Словарь создается с помощью функции api PyDict_New (); с. Входные данные сохраняются как пара значений ключа в словаре с использованием функции api PyDict_SetItemString ();
  2. Затем мы выполняем скрипт python PyRun_SimpleString (); передача скрипта в качестве параметра. Этот сценарий использует словарь, созданный в c. Обратите внимание, мы делаем словарь, созданный на c, доступным для скрипта с помощью методов PyImport_AddModule (); и PyModule_AddObject ();
  3. Мы сохраняем результат обработки данных в скрипте как пару ключ-значение в том же словаре, созданном выше. Затем код c может просто получить доступ к переменной результата (пара ключ-значение) после выполнения сценария.

Проблема Проблема, с которой мы сталкиваемся, возникает в случае одновременных запросов, поступающих от разных клиентов.Когда от разных клиентов поступает несколько запросов, мы склонны создавать исключения из счетчика ссылок на объекты. Обратите внимание, что для каждого запроса, поступающего от пользователя, мы создаем независимый словарь только для этого пользователя. Чтобы решить эту проблему, мы включили вызов PyRun_SimpleString (); внутри PyEval_AcquireLock (); и PyEval_ReleaseLock ();, но это привело к тому, что выполнение скрипта стало блокирующим вызовом. Поэтому, если выполнение сценария занимает много времени, все остальные пользователи также ждут ответа.

Не могли бы вы предложить наилучший из возможных подходов или указать, в чем мы ошибаемся. Пожалуйста, свяжитесь со мной для получения дополнительной информации.

Мы будем благодарны за любую помощь / руководство.

5
задан Some programmer dude 7 February 2012 в 12:47
поделиться