線程中使用事件循環

import threading
import asyncio


def thread_loop_task(loop):

    # 爲子線程設置自己的事件循環
    asyncio.set_event_loop(loop)

    async def work_2():
        while True:
            print('work_2 on loop:%s' % id(loop))
            await asyncio.sleep(2)

    async def work_4():
        while True:
            print('work_4 on loop:%s' % id(loop))
            await asyncio.sleep(4)

    future = asyncio.gather(work_2(), work_4())
    loop.run_until_complete(future)


if __name__ == '__main__':

    # 創建一個事件循環thread_loop
    thread_loop = asyncio.new_event_loop() 

    # 將thread_loop作爲參數傳遞給子線程
    t = threading.Thread(target=thread_loop_task, args=(thread_loop,))
    t.daemon = True
    t.start()

    main_loop = asyncio.get_event_loop()


    async def main_work():
        while True:
            print('main on loop:%s' % id(main_loop))
            await asyncio.sleep(4)


    main_loop.run_until_complete(main_work())
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章