python多线程编程和学习

首先我们应该应该明白进程和线程的概念
进程就是程序的一次执行过程,线程是处理器最小的执行单位,一个进程可以有很多线程,一个线程只能属于一个进程。
一个进程内的各个线程共享一块数据空间,当线程需要并发时,这就涉及到线程的执行顺序问题。因为线程的执行顺序不同可能会导致结果不同。如果多个线程共同访问一片数据,由于数据访问顺序不一样,导致结果不同(临界区)下面会有例子说明
下面介绍python的全局解释器锁(GIL)
这个锁能够保证同一时刻只有一个线程运行,可能大家这里就有疑问了,不是说要并发吗???其实并发只是宏观上同时运行,微观上是各个线程交替运行(按什么样顺序去执行才是我们要考虑的问题)。例如:调用IO之前线程会释放这个锁,为了避免浪费等待IO的时间,关于这个锁不再多说,
python中thread和threading模块选择
推荐使用threading模块,因为有更好的同步机制,还有就是因为thread模块主线程退出会强制所有子线程退出,会出现一个意想不到的结果。threading支持守护线程,主线程退出去,会保留一些比较重要的线程,可以用thread.setDaemon(True)标记为重要线程
下面代码演示这是我使用threading,比较喜欢的一种方式

import threading
from time import ctime, sleep


class mythread(threading.Thread):
    # 子类化创建线程,方便调用和集中管理
    def __init__(self,func,args):
        threading.Thread.__init__(self)
        self.func=func
        self.args=args


    def __call__(self):
        self.func(*self.args)#声明该子类是可以被调用的对象,不加这句话会有错误,不能调用


def loop(nesc,i):
    print('starting thread ',i)
    sleep(nesc)
    print('finish  ', i)

def main():
    loops=[4,2]
    threads=[]
    nloops=range(len(loops))

    for i in nloops:
        t=threading.Thread(target=mythread(loop,args=(loops[i],i)))
        threads.append(t)

    for i in nloops:
        # 开启线程
        threads[i].start()

    for i in nloops:
        # 等待结束
        threads[i].join()

    print("all done")

if __name__ =='__main__':
    main()

运行结果:
starting thread  0
starting thread  1
finish   1
finish   0
all done

因为我也是初学python,以上内容参考python核心编程这本书,大家也可以去看一下。
以后我会把我的学习笔记,贡献出来,有什么错误,欢迎指出,大家一起学习


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值