python gevent多线程练习

         最近上课时老师说,你们现在写的程序全是垃圾,你们现在必须建立起来一个多线程的概念,只有在多线程或者多进程下你们的程序才能看起来像样子.这两天偶然看到gevent可以来实现多线程,于是做一些小的练习!

      首先下载gevent模块:

pip install cython git+git://github.com/surfly/gevent.git@1.0rc3#egg=gevent

             To install latest development version:

pip install cython git+git://github.com/surfly/gevent.git#egg=gevent
在终端中执行,sudo一下就好了;

          做一个小的练习检测一下我的程序:

#-*-coding:utf-8-*-
import gevent
a=100
def foo():
    print 'Running in foo'
    gevent.sleep(0)
    print 'Explicit context switch to foo again'

    
def bar():
    print 'Explicit context to bar'
    gevent.sleep(0)
    print "我知道即使遇见你,我到了我的末日,我还是要准备好自己的最好的一面去迎接你!"
    print 'Implicit context switch back to bar'

gevent.joinall([
        gevent.spawn(foo),
        gevent.spawn(bar),
        ])

运行结果如下:
Running in foo
Explicit context to bar
Explicit context switch to foo again
我知道即使遇见你,我到了我的末日,我还是要准备好自己的最好的一面去迎接你!
Implicit context switch back to bar

我们可以看到在gevent.sleep(0)这个地方发生了一些显著的变化,并不是和我们想的那样直接执行而是去sleep了一会才继续的!

在python中我们很容易观察出,他的顺序执行性,在某个地方错误了,就会在这里卡住,不再往下执行,我们在程序中经常使用try来解决一些问题,我们同样也可以在遇见try的时候加上gevent,这样就能避免影响全局的操作,

下来我们用时间来看看我们的程序是如何运行的:

#-*-coding:utf-8-*-
import time
import gevent


time=time.asctime()

def gr1():
    print 'Start %s'%time
    print "我相信我们那些一起走过的日子"
    gevent.sleep(0)
    print "End %s"%time
    print "我也知道我们回不去了,你也知道!"

def gr2():
    print "Strat %s"%time
    print "即使她化在风尘中,我依旧爱着那段时光"
    gevent.sleep(0)
    print "End %s"%time
    print "那就让我们用一些老去的时光祭奠那阳光的岁月!"

def gr3():
    print "Strat %s"%time
    print "凌乱的时光,凌乱的记忆,每次出现的都是不同的碎片!"
    gevent.sleep(0)
    print "End %s"%time
    print "我们碎在记忆里!"

gevent.joinall([
    gevent.spawn(gr1),
    gevent.spawn(gr2),
    gevent.spawn(gr3),
    ])
执行结果如下:

Start Sun Oct  6 10:08:47 2013
我相信我们那些一起走过的日子
Strat Sun Oct  6 10:08:47 2013
即使她化在风尘中,我依旧爱着那段时光
Strat Sun Oct  6 10:08:47 2013
凌乱的时光,凌乱的记忆,每次出现的都是不同的碎片!
End Sun Oct  6 10:08:47 2013
我也知道我们回不去了,你也知道!
End Sun Oct  6 10:08:47 2013
那就让我们用一些老去的时光祭奠那阳光的岁月!
End Sun Oct  6 10:08:47 2013
我们碎在记忆里!


看到时间是一样的,我感到奇怪,想了想才知道,我用的是初始化,在开始时进行初始化,

所以每次赋值都一样,我必须直接调用函数,

Start Sun Oct  6 10:21:08 2013
我相信我们那些一起走过的日子
Strat Sun Oct  6 10:21:08 2013
即使她化在风尘中,我依旧爱着那段时光
Strat Sun Oct  6 10:21:08 2013
凌乱的时光,凌乱的记忆,每次出现的都是不同的碎片!
End Sun Oct  6 10:21:18 2013
我也知道我们回不去了,你也知道!
End Sun Oct  6 10:21:18 2013
那就让我们用一些老去的时光祭奠那阳光的岁月!
End Sun Oct  6 10:21:18 2013
我们碎在记忆里!

我们在改一下sleep的时间,4,1,0,时间改成这个三个参数看看结果!

Start Sun Oct  6 10:26:03 2013
我相信我们那些一起走过的日子
Strat Sun Oct  6 10:26:03 2013
即使她化在风尘中,我依旧爱着那段时光
Strat Sun Oct  6 10:26:03 2013
凌乱的时光,凌乱的记忆,每次出现的都是不同的碎片!
End Sun Oct  6 10:26:03 2013
我们碎在记忆里!
End Sun Oct  6 10:26:04 2013
那就让我们用一些老去的时光祭奠那阳光的岁月!
End Sun Oct  6 10:26:07 2013
我也知道我们回不去了,你也知道!
看到不同了吧!

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值