实例:
import threading
import time
num = 0
def run():
global num #声明num未全局变量才可在函数里作为全局变量使用,否则函数里的num为局部变量
time.sleep(0.8)
num += 1
def creat_threading():
t_objects = []
for i in range(100):
t = threading.Thread(target=run)#target=方法名,不能加括号,若方法有参数,则需加上args = (n,),如(target=run,args=(n,)),n后面必须加逗号
# t.setDaemon(True)#将线程变为守护线程,即程序无需等待改线程执行完毕
t.start()
t_objects.append(t) #为了不阻塞后面线程的启动,不在这里join,否则会变成但线程,所以先放到一个列表里再join
# print(i)
for t in t_objects: #循环线程实例表,等待所有线程执行完毕
t.join()#等待线程执行结束
return num
a = creat_threading()
print(a)
python的多线程实际是个假的多线程,不管你有多少核,都只会用一个核。python利用CPU上下文切换的优势,是我们看起来像使用了并发的效果,实际上它就是一个单线程。IO操作如读取数据不占用cpu,计算占用cpu。python多线程不适合cpu密集操作型的任务,适合IO操作密集型的任务
线程共用同一资源内存,如线程A修改了name值,在A还未存储修改后的值线程B又去修改name的值,那么B取到的是name的初始值,A修改后的值会被B修改后的值覆盖,造成数据不是我们想要的。为解决这种情况,我们需要加锁,即A在修改的时候不允许B修改
队列的主要作用:
1、解耦,使程序直接实现松耦合,一个模块被修改了不会影响其他的
2、提高处理效率
队列的几种模式:
1、先进先出
2、后进先出
3、设置优先级
网友评论