将异步/线程/进程抽象成worker的框架:python-worker (网络编程)

https://github.com/Danangjoyoo/python-worker

还挺好用的,一旦写了一些会阻塞异步函数的逻辑,就需要将其移到新线程/进程去执行。如果不用这个库,就需要重构代码。代码需求经常变动,这个库就不错。

import asyncio
import time
import threading
from worker import async_worker, ThreadWorkerManager


def is_main_thread():
    return threading.current_thread() == threading.main_thread()


@async_worker
async def go(text=''):
    th = threading.current_thread()
    print(text, is_main_thread(), th.native_id, th.name)
    for i in range(2):
        time.sleep(0.5)
        print(f'{text}{i}')
    print(f"done{text}")
    return f"{text}result"


async def main():
    th = threading.current_thread()
    print(is_main_thread(), th.native_id, th.name)
    tasks = [go('😄'), go('😭')]
    tasks = [await t for t in tasks]	# 这里的await并不会阻塞主线程
    ThreadWorkerManager.await_workers(*tasks)	# 这里才会阻塞,也应该阻塞,否则t.ret=None
    for t in tasks:
        print('print:', t.ret)

Runner = asyncio.run(main())

预期结果:

True 490863 MainThread
😄 False 490864 Thread-1 (<lambda>)
😭 False 490865 Thread-2 (<lambda>)
😄0
😭0
😄1
done😄
😭1
done😭
print: 😄result
print: 😭result
posted @ 2025-03-06 16:23  Nolca  阅读(47)  评论(0)    收藏  举报