Объединение объектов с асинхронностью и потоками - PullRequest
0 голосов
/ 13 ноября 2018

Я пытаюсь объединить потоки и asyncio, чтобы включить асинхронный модуль в мой не асинхронный код. Я новичок как в объектах, так и в asyncio, поэтому любая помощь приветствуется.

import threading
import asyncio

class WatchdogManager(threading.Thread):

    def __init__(self):
        self.loop = asyncio.get_event_loop()
        threading.Thread.__init__(self, target=self.loop_in_thread, args=(self.loop,))

    def run(self):
        self.watchdog_manager()

    def loop_in_thread(self):
        asyncio.set_event_loop(self)
        self.loop.run_until_complete(self.watchdog_manager())

    async def watchdog_manager(self):
        print("watchdog manager initiated")
        while True:
            print("watchdog manager running")
            await asyncio.sleep(5)


watchdog_manager = WatchdogManager()
watchdog_manager.start()

print("we can continue without being blocked")

Я получаю ошибку:

сопрограмма никогда не ожидалась

Я в основном пытаюсь превратить следующий код в объект:

import asyncio
import threading


async def greet_every_two_seconds():
    while True:
        print('Hello World')
        await asyncio.sleep(5)

def loop_in_thread(loop):
    asyncio.set_event_loop(loop)
    loop.run_until_complete(greet_every_two_seconds())


loop = asyncio.get_event_loop()


t = threading.Thread(target=loop_in_thread, args=(loop,))
t.start()

print("we can continue without being blocked")

1 Ответ

0 голосов
/ 13 ноября 2018
import threading
import asyncio

class WatchdogManager (threading.Thread):
    def __init__(self):
        threading.Thread.__init__(self,target=self.loop_in_thread, args=(self.loop,))

    async def watchdog_manager(self):
        print("Watchdog manager initiated")
        while True:
            print("Watchdog manager running")
            await asyncio.sleep(5)

def loop_in_thread(self,loop):
    asyncio.set_event_loop(loop)
    loop.run_until_complete(self.Watchdog_manager())

loop = asyncio.get_event_loop()

Запустите его:

watchdog_manager= WatchdogManager(app_log)
watchdog_manager.start()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...