首页 > 代码库 > Gevent中的同步与异步详解
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 = http://www.mamicode.com/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 = http://www.mamicode.com/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中的同步与异步详解