python多线程学习总结

本文详细介绍了进程与线程的概念及区别,重点讲解了Python中使用threading模块进行多线程编程的方法。通过实例演示了如何创建和启动线程,探讨了线程同步问题以及全局解释器锁对多线程的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


进程可以理解为一个运行中的程序,拥有自己的地址空间、内容、数据栈以及其他用于跟踪执行的辅助数据。
线程可立即为mini进程,其是在同一个进程下执行的,共享同一片数据空
间。线程包括开始、执行顺序和结束三个部分。

线程间的信息共享和通信更加容易。线程一般是以并发方式执行的,正是由于这种并行和数据共享机制,使得多任务间的协作成为可能。当然,在单核 CPU 系统中,因为真正的并发是不可能的,所以线程的执行实际上是这样规划的:每个线程运行一小会儿,然后让步给其他线程(再次排队等待更多的 CPU 时间)。在整个进程的执行过程中,每个线程执行它自己特定的任务,在必要时和其他线程进行结果通信。
当然,这种共享并不是没有风险的。如果两个或多个线程访问同一片数据,由于数据访问顺序不同,可能导致结果不一致。这种情况通常称为竞态条件(race condition)。所以大多数线程库都有一些同步原语,以允许线程管理器控制执行和访问。



  • 全局解释器锁
    python代码的执行是在python虚拟机中,尽管python解释器中可以运行多个线程,但是任意时刻只会有一个线程被解释器执行。
![全局解释器锁](https://img-blog.youkuaiyun.com/20170726092122349?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDU4NTI0Mg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) python支持多线程编写的模块有thread、threading、Queue等,目前比较推荐的为threading模块。

threading模块

**Thread类** threading模块的Thread类是主要的执行对象,其主要的属性和方法如下: ![这里写图片描述](https://img-blog.youkuaiyun.com/20170726152300581?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDU4NTI0Mg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
两种常用的创建线程的方法:



  • 创建Thread的实例,传一个函数进去
  • 派生Thread的子类,重写run方法,并创建子类的实例

# coding:utf-8 import threading from time import sleep, ctime loops = (4, 2)

派生子类,重写run方法

class Mythread(threading.Thread): def __init__(self, func, args, name=''): threading.Thread.__init__(self) self.name = name self.func = func self.args = args
def run(self):
    self.func(*self.args)

多线程运行的函数

def loop(nloop, nsec):
    print 'start loop', nloop, 'at:', ctime()
    sleep(nsec)
    print 'loop', nloop, 'done at:', ctime()

def main():
    print 'startig at:', ctime()
    threads = []
    nloops = range(len(loops))
    for i in nloops:
        t = Mythread(loop, (i, loops[i]), loop.__name__)
        threads.append(t)

    for i in nloops:
        threads[i].start()

    for i in nloops:
        threads[i].join()

    print 'all done at:', ctime()
    if __name__ == '__main__':
        main()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值