也谈Python多线程(实例讲解)

结合最近一段时间,对python多线程的了解和使用,现把对python多线程的体会用实例的形式展现出来,python的GIL(全局解释锁)一直倍受诟病,它使得python的多线程不能像c++/java 那样百分百的利用处理器多核,因此用python来实现多线程并发,效果并不一定比单线程处理效果好,尤其是计算密集型任务(CPU密集),这里引用知乎关于此问题的回复:[python多线程就像是一个游泳池的多个放水口,但是同时只能有一个放水口打开,虽然开起来是多个放水口同时放水,实际上仍然是不同线程之间来回切换运行,其实际效果可能还不如只打开一个放水口工作,因为存在context switch 的问题],因此对于CPU密集型任务,若采用并发完成,可以使用多进程实现,对于IO密集型任务,python多线程并发效果比单线程要好得多,因为context switch 的花销比IO等待花销小得多,而且多个线程可以防止IO阻塞的问题。

1 python多线程的实现

python标准库提供了两个模块实现多线程:_thread 和 threading ,threading 对 _thread 进行了封装,更容易实现,所以推荐使用threading 模块,通过一个简单实例,说明threading模块实现多线程的一些常用用法,代码如下:

#coding:utf-8

import threading
import time

class Thread(threading.Thread):
    def __init__(self,num):
        threading.Thread.__init__(self)
        self._num = num
        self.setDaemon(True)
    def run(self):
        global total,multex

        print threading.currentThread().getName()

        for x in xrange(
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风起云永

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值