Python多线程以及反射基础(笔记)

多线程编程

进程是资源分配的最小单位,线程是CPU调度的最小单位

每个进程至少有一个线程(主线程)

import threading
import  time
threadlist = ['hi', 'ki', 'jiji']
​
def action(func):
    for item in func:
        print(threading.current_thread().getName() + item)  #产生的线程执行的工作
        time.sleep(1)
​
for i in range(1,3):
    t = threading.Thread(target=action, args=(threadlist,))  #产生其他线程
    t.start()

线程常用的方法:

join方法:用于阻塞主线程,等子线程运行完在运行主线程

setDaemon方法:主线程结束,子线程也必须跟着结束

join方法:

import threading
import time
threadlist = ['hi', 'ki', 'jiji']
​
def action(func):
    for item in func:
        print(threading.current_thread().getName() + item)  #对线程进行计时
        time.sleep(1)
thread = []     #创建的新的列表
for i in range(1,3):
    t = threading.Thread(target=action, args=(threadlist,))
    t.start()
    thread.append(t)   #创建的线程加入thread中
​
for t in thread:   
    t.join()     #对线程进行阻塞
​
print('所有的结束')

setDaemon方法:需要加在start之前,即线程启动之前

t = threading.Thread(target=action, args=(threadlist,))
t.setDaemon(daemonic=True)
t.start()

反射

通过字符串的形式在运行时动态的修改程序的变量,方法以及属性操作,并不会实际的修改代码,目的是提升代码运行时的灵活性

常用的4个方法:

hasattr:输入一个字符串,判断对象有没有这个方法或属性

getattr:获取对象属性值或者方法的引用,返回方法的引用,若属性值,直接返回属性值,否则抛出异常

setattr:动态的添加一个方法或者属性

delattr:动态的删除一个方法或属性

class dog:
    def __init__(self, name):
        self.name = name
    def eat(self):
        print("{}正在吃东西" .format(self.name))
    def sleep(self):
        print("{}正在睡觉。。勿扰" .format(self.name))
Dog = dog("张张")
na = input('请输入狗的方法:')
if hasattr(Dog, na):
    try:
        getattr(Dog, na)()   # getattr返回的是一个方法名,需要加()
    except TypeError:
        print(getattr(Dog, na))
else:
    print('输入的方法有误')

setattr:动态的添加一个方法或者属性:

def run(action):
    print("在跑步,很开心,并{}" .format(action))   #定义一个方法
​
method = input("请输入要绑定的方法:")   #只是名称
setattr(Dog, method, run)    #将方法以用户输入的名称进行绑定
print(dir(Dog))
getattr(Dog, method)('hao')

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值