[Python]装饰器的例子之开线程

问题

有时候想给某个函数开个线程, 但是根据网上的教程用threading开线程首先要继承一个线程类, 然后重写几个函数, 麻烦得一批.
不就给函数开个线程嘛, 如果能像Golang那样一个go f()就好了

背景

装饰器

python的装饰器得是一个可调用对象, 一般为函数, 其返回时一般也应为可调用对象
在函数定义或类定义时可以使用装饰器, 类如下:

@装饰器
def 被装饰的函数(参数):
	...

以上语法实际上等价于

def 被装饰的函数(参数):
	...
被装饰的函数 = 装饰器(被装饰的函数)

开线程

使用threading库可以开线程, 具体步骤略, 可以参考菜鸟教程等

正文

装饰器定义如下

def ThreadMaker(f):
    def runner(*args, **argv):
        t = threading.Thread(target=f, args=args, kwargs=argv)
        t.start()
        return t
    return runner

之后给要开线程的函数头部加上@ThreadMaker

@ThreadMaker
def f(a):
	for i in range(10):
		time.sleep(1)
		print(a)

之后在主线程只要像往常一样调用这些函数就可以自动开线程了

f('a'); f('b')

输出如下

ba

b
a
ab

ba

ab

ba

a
b
a
b
ba

ab
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值