一个纯Python3实现的轻量且易于使用的跨网络队列服务。
此项目主要分为client端和server端,队列数据保存于server,同时server和client可以同时操作队列,支持多个client,本地队列是基于python3标准库queue实现,项目核心主要是基于TCP长连接进行跨网络传输队列数据,同时确保client的操作是线程安全的。
特点:
快,基于TCP长连接通信支持自动重连支持认证支持连接池上手快,api使用与标准库queue保持一致例子:
server.py
fromwukongqueueimportWuKongQueueimporttime#startaqueueserversvr=WuKongQueue(host='127.0.0.1',port=666,max_conns=10,max_size=0)withsvr:print("svrisstarted!")svr.put(b"1")svr.put(b"2")print("puttedb'1'andb'2',waitforclients...")time.sleep(10)print("svrclosed!")clientA.py
fromwukongqueueimportWuKongQueueClientclient=WuKongQueueClient(host='127.0.0.1',port=666)withclient:print("got",client.get())#b"1"client.task_done()importtimewait=5time.sleep(wait)print("after%sseconds,got"%wait,client.get(block=True))#waitforawhile,thenprintb"2"client.task_done()print("clientA:alltaskdone!")clientB.py
fromwukongqueueimportWuKongQueueClientclient=WuKongQueueClient(host='127.0.0.1',port=666)withclient:client.join()print("clientBalltaskdone!")按上面的顺序启动三个程序,可以看到如下效果:
#server.py首先打印svrisstarted!(马上)puttedb'1'andb'2',waitforclients...(马上)svrclosed!(10秒后)#clientAprintsecondlygotb'1'(马上)after5seconds,gotb'2'(5秒后)clientA:alltaskdone!(马上)#clientBprintlastlyclientBalltaskdone!(与clientA的alltaskdone同步)连接池:fromwukongqueueimportConnectionPool,WuKongQueueClientpool=ConnectionPool(host="localhost",port=2020,max_connections=3)client=WuKongQueueClient(connection_pool=pool)暂不支持的功能(也是TODO):
持久化我可以使用吗:此项目自诞生起就引入我的一个大型分布式爬虫项目中,目前持续运行中,项目至今迭代了6个版本。
后:连接池设计部分受redis库启发,读者如有兴趣可阅读源码与我讨论~
希望大家能够关注一下,给予我持久更新此项目的动力^_^
评论