2016-01-19 3 views
3

Я закодирован что-то с asyncio цикла:asyncio петля + GObject.MainLoop

loop = asyncio.get_event_loop() 
# bla coroutines 
loop.run_forever() 

и сейчас, кто-то дает мне часть кода, используя GObject.MainLoop()

l = GObject.MainLoop() 
# functions using gi.repository I cannot modify, bla 
l.run() 

Я должен интегрировать этот код в то же программное обеспечение, что и мой (с асинчио). И тезисы кода должны запускаться одновременно. Части кода должны обмениваться объектами.

Я не уверен, какое решение будет присвоено или, по крайней мере, не слишком уродливое?

ps: этот код должен работать на ОС Windows и python3.4, поэтому я не могу использовать glub. Я предположил, что могу использовать потоки, но я хотел бы знать, есть ли другой способ?

+0

Использование линии резьбы под http://stackoverflow.com/questions/31623194/asyncio-two-loops-for-different-io-tasks: резьба = [] т = threading.Thread (целевая = one_of_function) нитей .append (t) t.start() кажется работающим (я еще не пытался обменивать элементы), но все же чисто? –

+0

Вы можете комбинировать цикл gobject с циклом asyncio. См. Мой ответ для [введите описание ссылки здесь] (https://stackoverflow.com/questions/39804102/python-3-4-gtk-async) –

ответ

1

Окончательный, он работает с 2 потоками, как в моем предыдущем комментарии. Но связь между очередью (asyncio.Queue и queue.Queue) была слишком длинной. Я обнаружил библиотеку janus (потокобезопасная очередь, совместимая с asyncio), и она отлично работает.

+0

Не могли бы вы предоставить пример использования? – Menua

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