线程装饰器,实现异步

2018-12-29 18:26:24 +08:00
 fanhaipeng0403
import time
def run_async(func):
    from threading import Thread
    from functools import wraps
    @wraps(func)
    def async_func(*args, **kwargs):
        func_hl = Thread(target = func, args = args, kwargs = kwargs)
        func_hl.start()
        # func_hl.join(),  阻塞主进程(挡住,无法执行 join 以后的语句),专注执行多线程。
        # func_hl.join(2), 设置参数后,则等待该线程这么长时间就不管它了(而该线程并没有结束)。不管的意思就是可以执行后面的主进程了。
        return func_hl
    return async_func

@run_async
def child():
    time.sleep(4)
    print('thread child')

@run_async
def child1():
    time.sleep(2)
    print('thread child1')

def main():
    child()
    child1()
    print('Done')

In [27]: main() Done

In [28]: thread child1 thread child

1930 次点击
所在节点    Python
3 条回复
neoblackcap
2018-12-29 19:53:23 +08:00
例子会有创建孤儿进程的可能
neoblackcap
2018-12-29 20:08:16 +08:00
订正,例子应该是不会有问题的
shiyanfei5
2019-01-02 22:42:32 +08:00
这不就相当于多开了一个线程跑这个函数么。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/522385

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX