Я пишу многопоточную программу на C. Перед созданием потоков глобальная среда Python инициализируется вызовом Py_Initialize ()
. Затем в каждом созданном потоке используется общая глобальная среда python, и каждый поток вызывает метод python с параметрами, преобразованными в C. Все работает хорошо, пока здесь.
Когда я использую time.sleep ()
в загруженных модулях Python программа C вызывает Ошибка сегментации
. Кроме того, загруженный модуль python должен загрузить еще одну библиотеку C для продолжения работы. Я написал следующую глупую библиотеку счетчиков, чтобы проверить это:
# python part, call the counter function
lib = ctypes.cdll.LoadLibrary(libpycount.so)
for i in xrange(10):
lib.count()
// C part, dummy countings
#include
int counter = 1;
void
count() {
printf("counter:%d \n", counter);
counter++;
}
Я предполагаю, что это могло быть потому, что я неправильно управлял созданием сложных потоков. И я нашел потоков, созданных не Python
в документе python.
Любые идеи или предложения?