用python后端开发写游戏的后端服务器,有什么好的实践

10818人阅读
游戏开发(基础、入门、架构)(3)
摘要: 本文作为游戏服务器端开发的基本大纲,是游戏实践开发中的总结。第一部分专业基础,用于指导招聘和实习考核, 第二部分游戏入门,讲述游戏服务器端开发的基本要点,第三部分服务端架构,介绍架构设计中的一些基本原则。希望能帮到大家一 专业基础1.1 网络1.1.1 理解TCP/IP协议网络传输模型滑动窗口技术建立连接的三次握手与断开连接的四次握手连接建立与断开过程中的各种状态TCP/IP协议的传输效率思考1)请解释DOS攻击与DRDOS攻击的基本原理2)一个100Byte数据包,精简到50Byte, 其传输效率提高了50%3)TIMEWAIT状态怎么解释?1.1.2 掌握常用的网络通信模型SelectEpoll,边缘触发与平台出发点区别与应用Select与Epoll的区别及应用1.2 存储计算机系统存储体系程序运行时的内存结构计算机文件系统,页表结构内存池与对象池的实现原理,应用场景与区别关系数据库MySQL的使用共享内存1.3 程序对C/C++语言有较深的理解深刻理解接口,封装与多态,并且有实践经验深刻理解常用的数据结构:数组,链表,二叉树,哈希表熟悉常用的算法及相关复杂度:冒泡排序,快速排序二 游戏开发入门2.1防御式编程不要相信客户端数据,一定要检验。作为服务器端你无法确定你的客户端是谁,你也不能假定它是善意的,请做好自我保护。(这是判断一个服务器端程序员是否入门的基本标准)务必对于函数的传人参数和返回值进行合法性判断,内部子系统,功能模块之间不要太过信任,要求低耦合,高内聚插件式的模块设计,模块功能的健壮性应该是内建的,尽量减少模块间耦合2.2 设计模式道法自然。不要迷信,迷恋设计模式,更不要生搬硬套简化,简化,再简化,用最简单的办法解决问题借大宝一句话:设计本天成,妙手偶得之2.3 网络模型自造轮子: Select, Epoll, Epoll一定比Select高效吗?开源框架: Libevent, libev, ACE2.4 数据持久化自定义文件存储,如《梦幻西游》关系数据库: MySQLNO-SQL数据库: MongoDB选择存储系统要考虑到因素:稳定性,性能,可扩展性2.5 内存管理使用内存池和对象池,禁止运行期间动态分配内存对于输入输出的指针参数,严格检查,宁滥勿缺写内存保护。使用带内存保护的函数(strncpy, memcpy, snprintf, vsnprintf等),严防数组下标越界防止读内存溢出,确保字符串以’\0’结束2.6 日志系统简单高效,大量日志操作不应该影响程序性能稳定,做到服务器崩溃是日志不丢失完备,玩家关键操作一定要记日志,理想的情况是通过日志能重建任何时刻的玩家数据开关,开发日志的要加级别开关控制2.7 通信协议采用PDL(Protocol Design Language), 如Protobuf,可以同时生成前后端代码,减少前后端协议联调成本, 扩展性好JSON,文本协议,简单,自解释,无联调成本,扩展性好,也很方便进行包过滤以及写日志自定义二进制协议,精简,有高效的传输性能,完全可控,几乎无扩展性2.8 全局唯一Key(GUID)为合服做准备方便追踪道具,装备流向每个角色,装备,道具都应对应有全局唯一Key2.9 多线程与同步消息队列进行同步化处理2.10 状态机强化角色的状态前置状态的检查校验2.11 数据包操作合并, 同一帧内的数据包进行合并,减少IO操作次数单副本, 用一个包尽量只保存一份,减少内存复制次数AOI同步中减少中间过程无用数据包2.12 状态监控随时监控服务器内部状态内存池,对象池使用情况帧处理时间网络IO包处理性能各种业务逻辑的处理次数2.13 包频率控制基于每个玩家每条协议的包频率控制,瘫痪变速齿轮2.14 开关控制每个模块都有开关,可以紧急关闭任何出问题的功能模块2.15 反外挂反作弊包频率控制可以消灭变速齿轮包id自增校验,可以消灭WPE包校验码可以消灭包拦截篡改图形识别吗,可以踢掉99%非人的操作魔高一尺,道高一丈2.16 热更新核心配置逻辑的热更新,如防沉迷系统,包频率控制,开关控制等代码基本热更新,如Erlang,Lua等2.17 防刷关键系统资源(如元宝,精力值,道具,装备等)的产出记日志资源的产出和消耗尽量依赖两个或以上的独立条件的检测严格检查各项操作的前置条件校验参数合法性2.18 防崩溃系统底层与具体业务逻辑无关,可以用大量的机器人压力测试暴露各种bug,确保稳定业务逻辑建议使用脚本系统性的保证游戏不会崩溃2.19 性能优化IO操作异步化IO操作合并缓写 (事务性的提交db操作,包合并,文件日志缓写)Cache机制减少竞态条件 (避免频繁进出切换,尽量减少锁定使用,多线程不一定由于单线程) 多线程不一定比单线程快减少内存复制自己测试,用数据说话,别猜2.20 运营支持接口支持:实时查询,控制指令,数据监控,客服处理等实现考虑提供Http接口2.21 容灾与故障预案略三 服务器端架构3.1 什么是好的架构?满足业务要求能迅速的实现策划需求,响应需求变更系统级的稳定性保障简化开发。将复杂性控制在架构底层,降低对开发人员的技术要求,逻辑开发不依赖于开发人员本身强大的技术实力,提高开发效率完善的运营支撑体系3.2 架构实践的思考简单,满足需求的架构就是好架构设计性能,抓住重要的20%, 没必要从程序代码里面去抠性能热更新是必须的人难免会犯错,尽可能的用一套机制去保障逻辑的健壮性游戏的设计是一项颇有挑战性的工作,游戏服务器的发展也由以前的单服结构转变为多服机构,甚至出现了bigworld引擎的解决方案,最近了解到Unreal的服务器解决方案atlas也是基于集群的方式。是一个很复杂的课题,这里暂不谈bigworld和atlas的这类服务器的设计,更多的是基于功能和场景划分服务器结构。首先说一下思路,服务器划分基于以下原则:分离游戏中占用系统资源(cpu,内存,IO等)较多的功能,独立成服务器。在同一服务器架构下的不同游戏,应尽可能的复用某些服务器(进程级别的复用)。以多线程并发的编程方式适应多核处理器。宁可在服务器之间多复制数据,也要保持清晰的数据流向。主要按照场景划分进程,若需按功能划分,必须保持整个逻辑足够的简单,并满足以上1,2点。服务器结构图:各个服务器的简要说明:Gateway&是应用网关,主要用于保持和client的连接,该服务器需要2种IO,对client采用高并发连接,低吞吐量的网络模型,如IOCP等,对服务器采用高吞吐量连接,如阻塞或异步IO。网关主要有以下用途:分担了网络IO资源同时,也分担了网络消息包的加解密,压缩解压等cpu密集的操作。隔离了client和内部服务器组,对client来说,它只需要知道网关的相关信息即可(ip和port)。client由于一直和网关保持常连接,所以切换场景服务器等操作对client来说是透明的。维护玩家登录状态。World Server&是一个控制中心,它负责把各种计算资源分布到各个服务器,它具有以下职责:管理和维护多个Scene Server。管理和维护多个功能服务器,主要是同步数据到功能服务器。复杂转发其他服务器和Gateway之间的数据。实现其他需要跨场景的功能,如组队,聊天,帮派等。Phys Server&主要用于玩家移动,碰撞等检测。所有玩家的移动类操作都在该服务器上做检查,所以该服务器本身具备所有地图的地形等相关信息。具体检查过程是这样的:首先,Worldserver收到一个移动信息,WorldServer收到后向Phys Server请求检查,Phys Server检查成功后再返回给world Server,然后world server传递给相应的Scene Server。Scene Server&场景服务器,按场景划分,每个服务器负责的场景应该是可以配置的。理想情况下是可以动态调节的。ItemMgr Server&物品管理服务器,负责所有物品的生产过程。在该服务器上存储一个物品掉落,服务器初始化的时候载入到内存。任何需要产生物品的服务器均与该服务器直接通信。AIServer&又一个功能服务器,负责管理所有NPC的AI。AI服务器通常有2个输入,一个是Scene Server发送过来的玩家相关操作信息,另一个时钟Timer驱动,在这个设计中,对其他服务器来说,AIServer就是一个拥有很多个NPC的客户端。AIserver需要同步所有与AI相关的数据,包括很多玩家数据。由于AIServer的Timer驱动特性,可在很大程度上使用TBB程序库来发挥多核的性能。把网络游戏服务器分拆成多个进程,分开部署。这种设计的好处是模块自然分离,可以单独设计。分担负荷,可以提高整个系统的承载能力。缺点在于,网络环境并不那么可靠。跨进程通讯有一定的不可预知性。服务器间通讯往往难以架设调试环境,并很容易把事情搅成一团糨糊。而且正确高效的管理多连接,对来说也是一项挑战。前些年,我也曾写过好几篇与之相关的设计。这几天在思考一个问题:如果我们要做一个底层通用模块,让后续开发更为方便。到底要解决怎样的需求。这个需求应该是单一且基础的,每个应用都需要的。正如 TCP 协议解决了互联网上稳定可靠的点对点数据流通讯一样。游戏世界实际需要的是一个稳定可靠的在游戏系统内的点对点通讯需要。我们可以在一条 TCP 连接之上做到这一点。一旦实现,可以给游戏服务的开发带来极大的方便。可以把游戏系统内的各项服务,包括并不限于登陆,拍卖,战斗场景,数据服务,等等独立服务看成网络上的若干终端。每个玩家也可以是一个独立终端。它们一起构成一个网络。在这个网络之上,终端之间可以进行可靠的连接和通讯。实现可以是这样的:每个虚拟终端都在游戏虚拟网络(Game Network)上有一个唯一地址 (Game Network Address , GNA) 。这个地址可以预先设定,也可以动态分配。每个终端都可以通过游戏网络的若干接入点 ( GNAP ) 通过唯一一条 TCP 连接接入网络。接入过程需要通过鉴权。鉴权过程依赖内部的安全机制,可以包括密码证书,或是特别的接入点区分。(例如,玩家接入网络就需要特定的接入点,这个接入点接入的终端都一定是玩家)鉴权通过后,网络为终端分配一个固定的游戏域名。例如,玩家进入会分配到 player.12345 这样的域名,数据库接入可能分配到 database 。游戏网络默认提供一个域名查询服务(这个服务可以通过鉴权的过程注册到网络中),让每个终端都能通过域名查询到对应的地址。然后,游戏网络里所有合法接入的终端都可以通过其地址相互发起连接并通讯了。整个协议建立在 TCP 协议之上,工作于唯一的这个 TCP 连接上。和直接使用 TCP 连接不同。游戏网络中每个终端之间相互发起连接都是可靠的。不仅玩家可以向某个服务发起连接,反过来也是可以的。玩家之间的直接连接也是可行的(是否允许这样,取决于具体设计)。由于每个虚拟连接都是建立在单一的 TCP 连接之上。所以减少了互连网上发起 TCP 连接的各种不可靠性。鉴权过程也是一次性唯一的。并且我们提供域名反查服务,我们的游戏服务可以清楚且安全的知道连接过来的是谁。系统可以设计为,游戏网络上每个终端离网,域名服务将广播这条消息,通知所有人。这种广播服务在互联网上难以做到,但无论是广播还是组播,在这个虚拟游戏网络中都是可行的。在这种设计上。在逻辑层面,我们可以让玩家直接把聊天信息从玩家客互端发送到聊天服务器,而不需要建立多余的 TCP 连接,也不需要对转发处理聊天消息做多余的处理。聊天服务器可以独立的存在于游戏网络。也可以让广播服务主动向玩家推送消息,由服务器向玩家发起连接,而不是所有连接请求都是由玩家客互端发起。虚拟游戏网络的构成是一个独立的层次,完全可以撇开具体游戏逻辑来实现,并能够单独去按承载量考虑具体设计方案。非常利于剥离出具体游戏项目来开发并优化。最终,我们或许需要的一套 C 库,用于游戏网络内的通讯。api 可以和 socket api 类似。额外多两条接入与离开游戏网络即可。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:181757次
积分:2874
积分:2874
排名:第13383名
原创:96篇
转载:12篇
评论:137条
阅读:23685
阅读:14124
文章:10篇
阅读:19345
阅读:18632
(1)(1)(1)(1)(1)(1)(2)(1)(10)(12)(8)(13)(13)(12)(4)(14)(11)(3)(1)313被浏览69138分享邀请回答22 条评论分享收藏感谢收起26167被浏览2065829分享邀请回答matplotlib.org/api/pyplot_summary.html
(api的调用及一些示例代码)一个中文版的文档(不全):matplotlib较详细的剖析:三种图的绘制:多张图的绘制:一、环境准备
linux ubuntu 下需安装下面三个包:
Numpy, Scipy,Matplotlib
分别输入下面的代码进行安装:pip install numpy
pip install scipy
sudo apt-get install python-matplotlib
测试是否安装成功python
&&& import pylab
如果没有报错则安装成功二、开始画图1. 画最简单的直线图代码如下:import numpy as np
import matplotlib.pyplot as plt
plt.figure()
plt.plot(x,y)
plt.savefig("easyplot.jpg")
结果如下:代码解释:#x轴,y轴
#创建绘图对象
plt.figure()
#在当前绘图对象进行绘图(两个参数是x,y轴的数据)
plt.plot(x,y)
plt.savefig("easyplot.jpg")
2. 给图加上标签与标题 上面的图没有相应的X,Y轴标签说明与标题
在上述代码基础上,可以加上这些内容 代码如下:import numpy as np
import matplotlib.pyplot as plt
plt.figure()
plt.plot(x,y)
plt.xlabel("time(s)")
plt.ylabel("value(m)")
plt.title("A simple plot")
结果如下:代码解释:plt.xlabel("time(s)") #X轴标签 plt.ylabel("value(m)") #Y轴标签 plt.title("A simple plot") #标题 3. 画sinx曲线代码如下:# -*- coding: utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt
#设置x,y轴的数值(y=sinx)
x = np.linspace(0, 10, 1000)
y = np.sin(x)
#创建绘图对象,figsize参数可以指定绘图对象的宽度和高度,单位为英寸,一英寸=80px
plt.figure(figsize=(8,4))
#在当前绘图对象中画图(x轴,y轴,给所绘制的曲线的名字,画线颜色,画线宽度)
plt.plot(x,y,label="$sin(x)$",color="red",linewidth=2)
#X轴的文字
plt.xlabel("Time(s)")
#Y轴的文字
plt.ylabel("Volt")
#图表的标题
plt.title("PyPlot First Example")
#Y轴的范围
plt.ylim(-1.2,1.2)
plt.legend()
plt.show()
plt.savefig("sinx.jpg")
结果如下:4. 画折线图代码如下:# -*- coding: utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt
#X轴,Y轴数据
x = [0,1,2,3,4,5,6]
y = [0.3,0.4,2,5,3,4.5,4]
plt.figure(figsize=(8,4)) #创建绘图对象
plt.plot(x,y,"b--",linewidth=1)
#在当前绘图对象绘图(X轴,Y轴,蓝色虚线,线宽度)
plt.xlabel("Time(s)") #X轴标签
plt.ylabel("Volt")
plt.title("Line plot") #图标题
plt.show()
plt.savefig("line.jpg") #保存图
结果如下:原文转载地址:————————————现在Python成为了炽手可热的一门语言,在如何快速入门的同时,如何进行高效的开发是一门语言非常重要的优势。我们收集马哥Python了超过2000名学员的意见和建议,对Python常用的框架进行了梳理,这些框架包括事件I/O,OLAP,Web开发,高性能网络通信,测试,爬虫等。Python目前主流的应用包括:Web开发、图形界面开发、系统网络运维、网络编程、科学数字计算、3D游戏开发,而我们特别针对这6个方向进行了框架和库的整理。一、Python的几大主流Web开发框架1.Django: Python Web应用开发框架Django 应该是最出名的Python框架,GAE甚至Erlang都有框架受它影响。Django是走大而全的方向,它最出名的是其全自动化的管理后台:只需要使用起ORM,做简单的对象定义,它就能自动生成数据库结构、以及全功能的管理后台。网址:2.Bottle: 微型Python Web框架Bottle是一个简单高效的遵循WSGI的微型python Web框架。说微型,是因为它只有一个文件,除Python标准库外,它不依赖于任何第三方模块。网址:3.Flask:也是一个Web应用框架不同于Django它是轻量级Web应用框架。基于Werkzeug WSGI工具箱和Jinja2 模板引擎。Flask也被称为“microframework”,因为它使用简单的核心,用extension增加其他功能。Flask没有默认使用的数据库、窗体验证工具。 但是Flask是可以扩增的,你可以使用可以用Flask-extension增加前边没有的一些功能。网址:4.Tornado:异步非阻塞IO的Python Web框架Tornado的全称是Torado Web Server,从名字上看就可知道它可以用作Web服务器,但同时它也是一个Python Web的开发框架。最初是在FriendFeed公司的网站上使用,FaceBook收购了之后便开源了出来。Tornado 和现在的主流 Web 服务器框架和大多数Python框架有着明显的区别:它是非阻塞式服务器,而且速度相当快。也是比较常被使用的Python开源框架之一。网址:Web2py:全栈式Web框架Web2py是一个为Python语言提供的全功能Web应用框架,旨在敏捷快速的开发Web应用,具有快速、安全以及可移植的数据库驱动的应用,兼容Google App Engine。网址:webpy: 轻量级的Python Web框架webpy的设计理念力求精简(Keep it simple and powerful),源码很简短,只提供一个框架所必须的东西,不依赖大量的第三方模块,它没有URL路由、没有模板也没有数据库的访问。网址:二、Python的爬虫框架Scrapy:Python的爬虫框架Scrapy是一个使用Python编写的,轻量级的,简单轻巧,并且使用起来非常的方便。网址:三、图形界面开发框架PyQt能够实现高人气Qt库,因此如果大家熟知如何利用其它语言进行Qt开发,那么上手PyQt也不会出现什么障碍。其能够让Python应用具备跨平台外观风格与使用感受,同时继承Qt社区所带来的庞大知识支持与工具选项。PyQt同时提供商用与GPL许可(这一点与Qt项目本身有所不同),感兴趣的朋友也可了解与PyQt许可相关的常见问题(英文原文)。网址:Tkinter如果要为Python选出一款能够称得上“标准”的GUI工具包,那么答案应该是。Tkinter是一款以Tcl/Tk为基础的打包工具,而后者则属于诞生自上世纪九十年代初的高人气图形界面与语言组合。Tkinter的最大优势在于拥有丰富的资源,其中包括文本与代码示例以及庞大的用户社区。通过示例,我们能够轻松上手这套图形界面实现方案。Tkinter遵循Python许可,同时基于Tcl/Tk的BSD许可。网址:WxPython 将针对C++的wxWidgets跨平台GUI库带给了Python。WxPython是一套较为现代的方案,其外观的原生程度高于Tkinter,这主要归功于其更倾向于针对不同系统平台建立控件成果。其易于上手,同时拥有快速发展的开发者社区。不过大家需要自行将wxPython与应用相绑定,因为其无法通过Python自动进行安装。WxPython采用其父项目wxWindows的库许可,这一许可获得了OSI批准。网址:四、Python系统运维常用库1、psutil是一个跨平台库()能够实现获取系统运行的进程和系统利用率(内存,CPU,磁盘,网络等),主要用于系统监控,分析和系统资源及进程的管理。2、IPy(),辅助IP规划。3、dnspython()Python实现的一个DNS工具包。4、difflib:difflib作为Python的标准模块,无需安装,作用是对比文本之间的差异。5、filecmp:系统自带,可以实现文件,目录,遍历子目录的差异,对比功能。6、smtplib:发送电子邮件模块7、pycurl()是一个用C语言写的libcurl Python实现,功能强大,支持的协议有:FTP,HTTP,HTTPS,TELNET等,可以理解为Linux下curl命令功能的Python封装。8、XlsxWriter:操作Excel工作表的文字,数字,公式,图表等。9、rrdtool:用于跟踪对象的变化,生成这些变化的走走势图10、scapy()是一个强大的交互式数据包处理程序,它能够对数据包进行伪造或解包,包括发送数据包,包嗅探,应答和反馈等功能。11、Clam Antivirus免费开放源代码防毒软件,pyClamad,可以让Python模块直接使用ClamAV病毒扫描守护进程calmd。12、pexpect:可以理解成Linux下expect的Python封装,通过pexpect我们可以实现对ssh,ftp,passwd,telnet等命令行进行自动交互,而无需人工干涉来达到自动化的目的。13、paramiko是基于Python实现的SSH2远程安装连接,支持认证及密钥方式。可以实现远程命令执行,文件传输,中间SSH代理等功能。相对于Pexpect,封装的层次更高,更贴近SSH协议的功能,官网地址:(依赖:Crypto,Ecdsa,Python开发包python-devel)14、fabric是基于Python实现的SSH命令行工具,简化了SSH的应用程序部署及系统管理任务,它提供了系统基础的操作组件,可以实现本地或远程shell命令,包括命令执行,文件上传,下载及完整执行日志输出等功能。Fabric在paramiko的基础上做了更高一层的封装,操作起来更加简单。官网地址:(依赖setuptools,Crypto,paramiko包支持)15、CGIHTTPRequestHandler实现对CGI的支持。16、ansible()一种集成IT系统的配置管理,应用部署,执行特定任务的开源平台。基于Python实现,由Paramiko和PyYAML两个关键模块构建。Ansibl与Saltstack最大的区别是Ansible无需在被控主机上部署任何客户端,默认直接通过SSH通道进行远程命令执行或下发功能。17、YAML:是一种用来表达数据序列的编程语言。18、playbook:一个非常简单的配置管理和多主机部署系统。19、saltstack()是一个服务器基础架构集中化管理平台,一般可以理解为简化版的puppet和加强版的func。Saltstack基于Python语言实现,结合轻量级消息队列ZeroMQ,与Python每三方模块(Pyzmq,PyCrypto,Pyjinja2,python-msgpack和PyYAML等)构建。20、func,为解决集群管理,监控问题需设计开发的系统管理基础框架。四、Python科学数字计算的框架Python中的数据科学计算库有Numpy、Scipy、pandas、matplotlibNumpy是一个基础性的Python库,为我们提供了常用的数值数组和函数。numpy(Numerical Python extensions)是一个第三方的Python包,用于科学计算。这个库的前身是1995年就开始开发的一个用于数组运算的库。经过了长时间的发展,基本上成了绝大部分Python科学计算的基础包,当然也包括所有提供Python接口的深度学习框架。网址:Scipy是Python的科学计算库,对Numpy的功能进行了扩充,同时也有部分功能是重合的。Numpy和Scipy曾经共享过基础代码。网址:pandas是一个流行的开源Python项目,它的名称取panel data(面板数据,一个计量经济学的术语)和Python data analysis(Python数据分析)的意思。matplotlib是一个基于Numpy的绘图库。网址:Matplotlib是Python中最常用的可视化工具之一,可以非常方便地创建海量类型地2D图表和一些基本的3D图表。Matplotlib最早是为了可视化癫痫病人的脑皮层电图相关的信号而研发,因为在函数的设计上参考了MATLAB,所以叫做Matplotlib。Matplotlib首次发表于2007年,在开源和社区的推动下,现在在基于Python的各个科学计算领域都得到了广泛应用。Matplotlib的原作者John D. Hunter博士是一名神经生物学家,2012年不幸因癌症去世,感谢他创建了这样一个伟大的库。网址:四、Python的3D游戏开发框架Pygame是跨平台Python模块,专为电子游戏设计。包含图像、声音。pygame建立在SDL基础上,允许实时电子游戏研发而无需被低级语言(如机器语言和汇编语言)束缚。基于这样一个设想,所有需要的游戏功能和理念都(主要是图像方面)都完全简化为游戏逻辑本身,所有的资源结构都可以由高级语言提供,如Python。网址:ocos2d-python上面很多都用pyglet这个库的,里面主要的精灵什么的也是针对pyglet的封装,另外还封装了些音频库什么的。网址:五、Python的其他流行的开发框架Diesel:基于Greenlet的事件I/O框架Diesel提供一个整洁的API来编写网络客户端和服务器。支持TCP和UDP。Cubes:轻量级Python OLAP框架Cubes是一个轻量级Python框架,包含OLAP、多维数据分析和浏览聚合数据(aggregated data)等工具。Kartograph.py:创造矢量地图的轻量级Python框架Kartograph是一个Python库,用来为ESRI生成SVG地图。Kartograph.py目前仍处于beta阶段,你可以在virtualenv环境下来测试。Pulsar:Python的事件驱动并发框架Pulsar是一个事件驱动的并发框架,有了pulsar,你可以写出在不同进程或线程中运行一个或多个活动的异步服务器。Falcon:构建云API和网络应用后端的高性能Python框架Falcon是一个构建云API的高性能Python框架,它鼓励使用REST架构风格,尽可能以最少的力气做最多的事情。Dpark:Python版的SparkDPark是Spark的Python克隆,是一个Python实现的分布式计算框架,可以非常方便地实现大规模数据处理和迭代计算。DPark由豆瓣实现,目前豆瓣内部的绝大多数数据分析都使用DPark完成,正日趋完善。Buildbot:基于Python的持续集成测试框架Buildbot是一个开源框架,可以自动化软件构建、测试和发布等过程。每当代码有改变,服务器要求不同平台上的客户端立即进行代码构建和测试,收集并报告不同平台的构建和测试结果。Zerorpc:基于ZeroMQ的高性能分布式RPC框架Zerorpc是一个基于ZeroMQ和MessagePack开发的远程过程调用协议(RPC)实现。和 Zerorpc 一起使用的 Service API 被称为 zeroservice。Zerorpc 可以通过编程或命令行方式调用。好了,最后我们再来看看,到底是哪些人学习呢?目前来学的人群分为以下几类:第一类:入行编程新手:大学刚毕业或者其他行业转岗,想从事编程开发的工作,目前认为Python比较火,想入行;第二类:Linux系统运维人员:Linux运维以繁杂著称,对人员系统掌握知识的能力要求非常高,那么也就需要一个编程语言能解决自动化的问题,Python开发运维工作是首选,Python运维工资的薪资普遍比Linux运维人员的工资高。第三类:做数据分析或者人工智能:不管是常见的大数据分析或者一般的金融分析、科学分析都比较大程度的应用了数据分析,人工智能的一些常见应用也使用了Python的一些技术。第四类:在职程序员转Python开发:平常只关注div+css这些页面技术,很多时候其实需要与后端开发人员进行交互的,现在有很多Java程序在转到Python语言,他们都被Python代码的优美和开发效率所折服第五类:其他:一些工程师以前在做很多SEO优化的时候,苦于不会编程,一些程序上面的问题,得不到解决,只能做做简单的页面优化。 现在学会Python之后,可以编写一些查询收录,排名,自动生成网络地图的程序,解决棘手的SEO问题如果你有更好的建议,欢迎留言和讨论。13211 条评论分享收藏感谢收起

我要回帖

更多关于 python怎么写后端 的文章

 

随机推荐