2013-04-23 3 views
0

Я использую Python, и у меня есть интерфейс swig для программы C++. Эта программа является научным приложением, которое также обрабатывает базу данных. Мы используем его для извлечения и сохранения данных, но проблема в том, что он не поддерживает параллельные вызовы. Это означает, что если я попытаюсь создать разные потоки из Python и вызвать функции из этого приложения, это вызовет исключение.Использовать только одну функцию модуля для запуска за один раз

Итак, мой вопрос: есть ли способ «заставить» модуль python иметь функцию, выполняемую только один раз за раз?

Как я уже говорил, мы будем извлекать некоторые данные из этой программы, чем некоторые хрусткие числа и сохранять новые данные в базе данных, которая хранится в программе. То, что я имел в виду, это оболочка этого модуля каким-то образом, что функции будут работать только по одному, поэтому я могу на самом деле использовать больше потоков для числа хрустких частей программы, не беспокоясь о наличии двух (или более) функций этот модуль выполняется одновременно.

ответ

2

Что вы ищете, это lock. Если вы используете python threading, вы можете просто использовать threading.Lock.

В функции, которая может выполняться только один раз за раз, получить блокировку при вводе и отпустить ее непосредственно перед завершением return или в конце функции.

Смежные вопросы