一个纯Pytho3实现的轻量且易于使用的跨网络队列服务。
此项目主要分为cliet端和server端,队列数据保存于server,同时server和cliet可以同时操作队列,支持多个cliet,本地队列是基于pytho3标准库queue实现,项目核心主要是基于TCP长连接进行跨网络传输队列数据,同时确保cliet的操作是线程安全的。
特点:
快,基于TCP长连接通信支持自动重连支持认证支持连接池上手快,api使用与标准库queue保持一致例子:
server.py
fromwukogqueueimportWuKogQueueimporttime#startaqueueserversvr=WuKogQueue(host='127.0.0.1',port=666,max_cos=10,max_size=0)withsvr:prit("svrisstarted!")svr.put(b"1")svr.put(b"2")prit("puttedb'1'adb'2',waitforcliets...")time.sleep(10)prit("svrclosed!")clietA.py
fromwukogqueueimportWuKogQueueClietcliet=WuKogQueueCliet(host='127.0.0.1',port=666)withcliet:prit("got",cliet.get())#b"1"cliet.task_doe()importtimewait=5time.sleep(wait)prit("after%ssecods,got"%wait,cliet.get(block=True))#waitforawhile,thepritb"2"cliet.task_doe()prit("clietA:alltaskdoe!")clietB.py
fromwukogqueueimportWuKogQueueClietcliet=WuKogQueueCliet(host='127.0.0.1',port=666)withcliet:cliet.joi()prit("clietBalltaskdoe!")按上面的顺序启动三个程序,可以看到如下效果:
#server.py首先打印svrisstarted!(马上)puttedb'1'adb'2',waitforcliets...(马上)svrclosed!(10秒后)#clietApritsecodlygotb'1'(马上)after5secods,gotb'2'(5秒后)clietA:alltaskdoe!(马上)#clietBpritlastlyclietBalltaskdoe!(与clietA的alltaskdoe同步)连接池:fromwukogqueueimportCoectioPool,WuKogQueueClietpool=CoectioPool(host="localhost",port=2020,max_coectios=3)cliet=WuKogQueueCliet(coectio_pool=pool)暂不支持的功能(也是TODO):
持久化我可以使用吗:此项目自诞生起就引入我的一个大型分布式爬虫项目中,目前持续运行中,项目至今迭代了6个版本。
后:连接池设计部分受redis库启发,读者如有兴趣可阅读源码与我讨论~
希望大家能够关注一下,给予我持久更新此项目的动力^_^
评论