Как взаимодействовать между традиционным потоком и потоком asyncio в Python?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как взаимодействовать между традиционным потоком и потоком asyncio в Python?

Сообщение Anonymous »

Какой идиоматический способ установить одностороннюю связь между двумя потоками threading.Thread в Python? Назовите их потоком a и потоком b.
является производителем, он постоянно генерирует значения для потребления b.
является потребителем, он считывает одно значение, сгенерированное , обрабатывает значение с помощью сопрограммы, а затем считывает следующее значение и так далее.

Иллюстрация:

Код: Выделить всё

q = very_magic_queue.Queue()

def worker_of_a(q):
while True:
q.put(1)
time.sleep(1)

a = threading.Thread(worker_of_a, args=(q,))
a.start()

async def loop(q):
while True:
# v must be processed in the same order as they are produced
v = await q.get()
print(v)

async def foo():
pass

async def b_main(q):
loop_fut = asyncio.ensure_future(loop(q))
foo_fut = asyncio.ensure_future(foo())
_ = await asyncio.wait([loop_fut, foo_fut], ...)
# blah blah blah

def worker_of_b(q):
asyncio.set_event_loop(asyncio.new_event_loop())
asyncio.get_event_loop().run_until_complete(b_main(q))

b = threading.Thread(worker_of_b, args=(q,))
b.start()
Конечно, приведенный выше код не работает, потому что query.Queue.get нельзя ожидать, а asyncio.Queue нельзя использовать в другом потоке.

Мне также нужен канал связи от b до a.

Было бы здорово, если бы это решение могло работать и с gevent.

Спасибо :)

Подробнее здесь: https://stackoverflow.com/questions/558 ... -in-python
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»