Gevent中的同步与异步详解
Posted 程序猿终结者
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Gevent中的同步与异步详解相关的知识,希望对你有一定的参考价值。
同步,异步概念
1.同步就是发生调用时,一定等待结果返回,整个调用才结束;
2.异步就是发生调用后,立即返回,不等待结果返回。被调用者通过状态、通知来通知调用者,或通过回调函数处理这个调用。
查询
1.同步查询
2.异步查询
同步异步与阻塞,非阻塞区别
1.阻塞/非阻塞, 它们是程序在等待消息(无所谓同步或者异步)时的状态;
2.同步/异步,是程序获得关注消息通知的机制。
同步异步与阻塞,非阻塞组合
1.同步阻塞
效率最低(日志程序)。
2.同步非阻塞
效率也不高(需要轮询)。
3.异步阻塞
一般模式线程回调。
4.异步非阻塞
IOCP。
实例
import redis
import Queue
import time
from threading import Thread
def handle_callback( res ) :
print \' get redis res : \' , res
class SetData :
def __init__( self , key , value , handle ) :
self.key = key
self.value = value
self.handle = handle
class RedisAsyncHandle ( Thread ) :
queue = Queue.Queue ( maxsize = 1024 )
r = redis.Redis ( host = \' localhost \' , port = 6379 , db = 0 )
def send_set_cmd ( self , key , value ) :
set_data = SetData ( key , value , handle_callback )
self.queue.put( set_data )
def run ( self ) :
while True :
while not self.queue.empty():
item = self.queue.get()
print \' get item \'
res = self.r.set ( item.key , item.value )
item.handle( res )
time.sleep( 0.1 )
handle = RedisAsyncHandle()
handle.start()
handle.send_set_cmd ( \' name1 \' , \' allen1 \' )
handle.join()
执行结果:
原文链接:http://www.maiziedu.com/wiki/frame/together/
以上是关于Gevent中的同步与异步详解的主要内容,如果未能解决你的问题,请参考以下文章