Проблемы относительно Повышения:: Python и Повышение:: Потоки

Меня и друга разрабатывают приложение, которое использует Повышение:: Python. Я определил интерфейс в C++ (хорошо чистый виртуальный класс), выставил посредством Повышения:: Python пользователям, которые должны наследоваться ему и создать урок, который приложение посещает и использует для некоторого механизма обратного вызова.

Все, что далеко идет вполне прилично. Теперь, функциональный обратный вызов может занять время (пользователь, возможно, запрограммировал некоторый тяжелый материал)..., но мы должны перекрасить окно, таким образом, не выглядит, что "застрявший".We хотел использовать Повышение:: Поток для этого. Только один обратный вызов будет работать за один раз (никакие другие потоки не назовут Python одновременно), таким образом, мы думали, что это не будет такой много..., так как мы не используем потоки в Python, ни в коде C++, перенесенном для Python.

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

Я думаю, что не должен говорить, что выполнение никогда не достигает второго макроса. Это показывает несколько ошибок каждый раз, это работает..., но t's всегда при вызове фактического обратного вызова. Я погуглил много, даже прочитайте некоторые документы PEP относительно потоков, но они все говорят о поточной обработке в модуле Python (который я не делаю шестерки, это - просто чистый виртуальный выставленный класс), или распараллеливающий в Python, не о главном приложении, называя Python от нескольких потоков.

Помогите, это расстраивало меня в течение нескольких часов.

Ps на помощь!

7
задан Fabzter 7 July 2010 в 17:19
поделиться

1 ответ

Python можно вызывать из нескольких потоков последовательно, я не думаю, что это проблема. Мне кажется, что ваши ошибки возникают из-за плохого кода C ++, поскольку вы сказали, что ошибки произошли после PY_BEGIN_ALLOW_THREADS и до PY_END_ALLOW_THREADS.

Если вы знаете, что это неправда, можете ли вы опубликовать еще немного фактического кода и показать, где именно он ошибочен и какие именно ошибки он дает?

1
ответ дан 7 December 2019 в 20:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: