Как я могу использовать asyncio.Queue между несколькими потоками?Python

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

Сообщение Anonymous »

Этот вопрос отличается от вопроса «Есть ли способ использовать asyncio.Queue в нескольких потоках?»

У меня запущено 2 цикла событий asyncio. в двух разных потоках.
Поток1 передает данные в Поток2 через asyncio.Queue().

Один из потоков выдает исключение: Future прикреплен к другому циклу

Это правда, потому что у меня есть одна очередь, которую я использую в разных циклах. Как разделить очередь между двумя циклами в двух разных потоках?

Пример кода:

q = asyncio.Queue()

async def producer(q):
await asyncio.sleep(3)
q.put(1)

def prod_work(q):
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
loop.run_until_complete(producer(q))

async def consumer(q):
await asyncio.sleep(3)
res = await q.get()

def cons_work(q):
loop2 = asyncio.new_event_loop()
asyncio.set_event_loop(loop2)
loop2.run_until_complete(consumer(q))

def worker(q):
# main thread - uses this threads loop
prod = threading.Thread(target=prod_work, args=(q,))

# separate thread - uses NEW loop
cons = threading.Thread(target=cons_work, args=(q,))

prod.start()
cons.start()

worker(q)


полная трассировка стека:

Exception in thread Thread-2:
Traceback (most recent call last):
File "/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/threading.py", line 917, in _bootstrap_inner
self.run()
File "/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/threading.py", line 865, in run
self._target(*self._args, **self._kwargs)
File "asyncio_examples.py", line 24, in cons_work
loop2.run_until_complete(consumer(q))
File "/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/asyncio/base_events.py", line 568, in run_until_complete
return future.result()
File "asyncio_examples.py", line 18, in consumer
res = await q.get()
File "/usr/local/Cellar/python/3.7.0/Frameworks/Python.framework/Versions/3.7/lib/python3.7/asyncio/queues.py", line 159, in get
await getter
RuntimeError: Task got Future attached to a different loop


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

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Проблемы при использовании python queue.queue () с несколькими потоками
    Anonymous » » в форуме Python
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous
  • Проблемы при использовании python queue.queue () с несколькими потоками
    Anonymous » » в форуме Python
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Asyncio Async Funcitons вешает с Asyncio.gather. (Код работает без Asyncio.gather)
    Anonymous » » в форуме Python
    0 Ответы
    22 Просмотры
    Последнее сообщение Anonymous
  • Какова цель asyncio.Queue() и как правильно его использовать?
    Anonymous » » в форуме Python
    0 Ответы
    22 Просмотры
    Последнее сообщение Anonymous
  • Есть ли способ использовать asyncio.Queue в нескольких потоках?
    Anonymous » » в форуме Python
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous

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