说道Python和多线程,非常easy想到GIL,GIL意味着仅仅要是用Python做的多线程程序.就无法利用多个CPU. 经过一些失败的尝试后,我也一度觉得GIL是无解的.我们甚至把注意力转向了IronPython等无锁Python,可是实际上那样问题可能很多其它.比方我们不熟悉mono,mono也没达到全然成熟的程度. 直到skynet的QQ群里一位朋友介绍了还有一种载入so的方式,事情才有了180度的变化. 方法例如以下: 1.编译Python源代码,编译时加上參数--enable-sha…
到了新的环境.老大让我有空研究下一代server技术,作为一个长期任务. 新的server想达到的目标: 1.分布式系统,对象(Entity)之间的关系类似于Actor模型. 2.逻辑服务,是单进程.多线程的,对象之间发消息进行通信,可是简单读取属性尽可能做到直接. 3.必须使用Python语言.开发方式类似于BigWorld引擎. 这个目标还是非常雄伟的,仅仅能从底层一步一步攻克. 在这里记录一下解决这个问题的过程,既是分享.也是督促自己不要半途而废. 我个人极度喜欢skynet框架,因为非常…
今天来完毕绘制矢量图形. 没有读过前几章的同学,请先阅读前几章: Python游戏引擎开发(一):序 Python游戏引擎开发(二):创建窗体以及重绘界面 Python游戏引擎开发(三):显示图片 Python游戏引擎开发(四):TextField文本类 Python游戏引擎开发(五):Sprite精灵类和鼠标事件 Python游戏引擎开发(六):动画的小小研究 Graphics类 首先我们创建Graphics类用于创建矢量图形: class Graphics(DisplayObject): d…
本次来实现Sprite类和鼠标事件. 说起这个Sprite啊,涉及过2D游戏研究领域的看官应该都听说过它. 它中文原意是"精灵",只是在不同人的眼中,它所表示的意义不同. 比方说在cocos2d中.它能够是一张图片.只是在flash中,Sprite是一个相似于"层"的家伙. 当然你把它定义为层并非非常准确,实际上它是一个含显示列表的显示对象. 什么意思呢?各位看官假设阅读了前面的章节,那对显示列表并不陌生.它说白了就是一个包括其它显示对象的容器. 那或许你会想,为什…
python 微服务开发是一本讲python 如果进行微服务开发的实战类书籍,里面包含了几个很不错的python 模块,记录下,方便后期回顾学习 处理并发的模块 greenlet &&gevent twisted && tornado asyncio web api 模块 当然有好多可以使用的,只记录作者使用的 flask aiohttp 测试 负载测试boom pytest && tox webtest 文档管理 api openapi sphinx(集成…
看官们肯定还有大部分不是很熟悉Actor模型. 我这里基于Erlang, Skynet等语言和框架库来实战型解释下Actor模型.  Actor概念 Actor模型和OO类似, 都是符合人的思维模式进行编码. OO里啥都是类, 用类来模拟对象, 解决所有的问题. Actor类似的使用Actor来模拟处理对象和单元 Actor在Erlang中叫进程(非操作系统进程), 在Skynet中叫svc(服务)  Mailbox消息队列 每个Actor中包含有一个mailbox, 也就是邮箱. Actor自…
内容目录: rabbitMQ python操作mysql,pymysql模块 Python ORM框架,SQLAchemy模块 Paramiko 其他with上下文切换 rabbitMQ RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统.他遵循Mozilla Public License开源协议. MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法.应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们.消…
上一篇文章展示了如何简单创建一个osg python 程序, 本篇展示了了一些基础数据结构的使用: from pyosg import * vec = osg.Vec3Array() #push back tuple vec.push_back((1.0,2.0,3.0)) #push back list vec.push_back([4.0,5.0,6.0]) import numpy as np #push back numpy array vec.push_back([4.0,5.0,6.…
个人感觉比较重要的快速链接: http://open.taobao.com/doc/detail.htm?id=102513 http://open.taobao.com/doc/detail.htm?id=102450 http://open.taobao.com/doc/detail.htm?id=102565 大家可以直接点击进去,查看其内容,尤其是和这链接相关的话题!…
start_kernel之前的汇编代码分析 Boot中执行下面两句话之后,进入uclinux内核. theKernel = (void (*)(int, int, unsigned int))((uint32_t)0x08003001); theKernel(0, 2189, ((uint32_t)0x20000100)); 首先来到0x0800 3000处,此时携带有三个参数,R0.R1.R2,分别是0,2189,0x2000 0100. 0x0800 3000对应着下面stext的汇编代码.…
本节内容 进程与线程的概念 Python threading 模块 GIL——global interpreter lock Mutex互斥锁(线程锁) Semaphore信号量 Events事件 Queue队列 1.进程与线程的概念 程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程.程序和进程的区别就在于:程序是指令的集合,它是进程运行的静态描述文本:进程是程序的一次执行活动,属于动态概念. 在多道编程中,我们允许多个程序同时加载到内存中,在操…
一 介绍 ''' 定义: In CPython, the global interpreter lock, or GIL, is a mutex that prevents multiple native threads from executing Python bytecodes at once. This lock is necessary mainly because CPython’s memory management is not thread-safe. (However, si…
一 threading模块介绍 multiprocess模块的完全模仿了threading模块的接口,二者在使用层面,有很大的相似性,因而不再详细介绍 二 开启线程的两种方式 from threading import Thread import os def talk(): print('%s is running' %os.getpid()) if __name__ == '__main__': t=Thread(target=talk) #线程 # t=Process(target=tal…
python--GIL锁 GIL锁 本节目录 一 介绍 二 GIL介绍 三 GIL与Lock 四 GIL与多线程 五 多线程性能测试 一 背景知识 ''' 定义: In CPython, the global interpreter lock, or GIL, is a mutex that prevents multiple native threads from executing Python bytecodes at once. This lock is necessary mainly…
了解了HTTP协议和HTML文档,我们其实就明白了一个Web应用的本质就是: 浏览器发送一个HTTP请求: 服务器收到请求,生成一个HTML文档: 服务器把HTML文档作为HTTP响应的Body发送给浏览器: 浏览器收到HTTP响应,从HTTP Body取出HTML文档并显示. 所以,最简单的Web应用就是先把HTML用文件保存好,用一个现成的HTTP服务器软件,接收用户请求,从文件中读取HTML,返回.Apache.Nginx.Lighttpd等这些常见的静态服务器就是干这件事情的. 如果要动…
1. 理清楚游戏思路 实现功能:2个洞穴选择,一个洞穴是好龙,一个洞穴是坏龙,坏龙可以概率屠龙或者概率逃跑选项(后续难度需要增加宝藏获取装备,随机遇见商人,随着游戏进度逐步减少屠龙概率) 2. 计数和函数导入 import random,timegame_dict={}game_dict['Treasure_number']=0# 宝藏个数game_dict['Challenge_dragon_number'] = 0 # 屠龙次数 3. 构造输入验证 def Double_choice(a,b…
import flaskimport json #步骤一:# __name__,代表当前这个python文件server = flask.Flask(__name__) #把咱们当前这个python文件,当做一个服务 #步骤二:@server.route('/index',methods=['get'])#此处methods=['get','Post']也可以,表示该接口同时支持get和post两种调用方式 def reg(): username = flask.request.values.g…
在从事游戏开发的6年时间里面.涉及的内容包含运营平台.GM工具.MMORPG.FPS游戏. 游戏都已经上线而且稳定执行.单server的承载量在1万-5万之间.对于这种成绩我自己还是比較惬意了.期间得到非常多同事.领导的帮助,在技术和管理上都有了自己的进步和总结. 由于在与团队成员的约谈过程中,差点儿全部想要继续做游戏的程序猿都会提到一个问题:"怎么样成为一个主程?"由于这个就是大家的努力方向,是大家学习的一个阶段性目标. 游戏server主程应该来说是一个对技术要求繁杂,差点儿涉及了…
Python全栈开发 一文让你彻底明白Python装饰器原理,从此面试工作再也不怕了. 一.装饰器 装饰器可以使函数执行前和执行后分别执行其他的附加功能,这种在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator),装饰器的功能非常强大,但是理解起来有些困难,因此我尽量用最简单的例子一步步的说明这个原理. 1.不带参数的装饰器 假设我定义了一个函数f,想要在不改变原来函数定义的情况下,在函数运行前打印出start,函数运行后打印出end,要实现这样一个功能该怎么实现?看下面如何用…
1. 游戏思路和流程图 实现功能:船只在可以在大海上移动打捞宝藏,船只可以扫描1格范围内的宝藏(后续难度,可以调整扫描范围,可以调整前进的格数) 游戏流程图 2. 使用模块和游戏提示 import randomships_coordinates={} #船只坐标def game_info(): '''游戏提示''' print('欢迎来到船只寻宝游戏') print('W(上) A(左) S(下) D(右) 来移动') print('船(B)的探测范围是一格,移动次数为九次') 3. 双选验证…
1.游戏思路和流程图 实现功能:玩家猜测三位不一样的数字,猜错了有提示,提示分别为(位置错误数字正确),(位置和数字正确),(数字和位置都不正确) 游戏流程图 2. 使用模块和游戏提示 import randomdef game_info(): print('欢迎来到数字推理游戏') print('系统会随机抽取三位不相同的数字') print('根据系统提示来推理出这3位数字') 3. 双选验证 def Double_choice(a,b,hint): '''双选择验证函数 :param a…
1. 游戏思路和流程图 实现功能,现实生活中的井字棋玩法 游戏流程图 2. 使用模块和游戏提示 import random def game_info(): print('欢迎来到井字棋游戏') print('输入数字1~9进行下棋') 3. 棋盘显示 def display_board(checkerboard): '''棋盘显示''' print(' '.join(checkerboard[6:9])) print(' '.join(checkerboard[3:6])) print(' '…
1.游戏思路和流程图 实现功能:随机一个单词让玩家猜测(后续难度实现修改为成语填空,成语必须要有提示,可修改猜的次数,增加连续猜成语,难度系数随着次数的增加而增加) 游戏流程图 2. 单词库和模块 import randomword='''and away big blue can come down find for funny go'''word_list=word.split() 3. 游戏开始提示 def game_info(): '''游戏开始提示函数''' print('欢迎来到猜单…
1. 构造猜数字核心函数 import random def guess_core(guess_min,guess_max,guess_counrt): '''猜数字核心判断函数 :param guess_min 范围的开始 :param guess_max 范围的结束 :param guess_counrt 猜数字的次数''' print('请猜出%d~%d之间的任意一个数字你有%d次机会'%(guess_min,guess_max,guess_counrt)) random_number =…
python全栈开发学习_day1_计算机五大组成部分及操作系统 python全栈开发学习_day2_语言种类及变量 python全栈开发_day3_数据类型,输入输出及运算符 python全栈开发_day4_if,while和for python全栈开发_day5_字符串及列表类型 python全栈开发_day6_元组,字典,集合 python全栈开发_day7_字符编码,以及文件的基本读取 python全栈开发_day8_文件的多种读写方式及游标 python全栈开发_day9_脚本文件和函…
本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 上一个博客我们一起学习了pygame中冲突检测技术:http://www.cnblogs.com/msxh/p/5027688.html 这次我们来一起学习在pygame游戏里面常用的一些数据结构: 数据,列表,元组,队列,栈. 一.数组与列表 数组可以理解为简化的列表.像我们之前使用的pygame.sprite.Group这样的精灵组,也是一个列表.列表的元素是可变的,它具有添加.删除.搜索.排序等多种…
如果你没有任何编程经验,而且想尝试一下学习编程开发,这个系列教程一定适合你,它将带你学习最基本的Python语法,并让你掌握小游戏的开发技巧.你所需要的,就是付出一些时间和耐心来尝试这些代码和操作. @[top] 一.准备工作 1 下载安装 python 2 下载安装VS code编辑器 安装时,要注意勾选 添加到path 3 安装pygame模块 在VisualStudioCode的顶部菜单[Terminal-New Teminal]打开命令行终端,然后输入命令python -m pip in…
14软二杨近星(2014551622) 刚刚过去清明节, 意味着离交项目的时间, 还有三个星期, 有点着急了, 可是, 还是觉得无所适从... 项目进展: 刚刚过去的一周, 事非常多, 以至于, 进展不是很明显. 首先, 上次聚在一起, 定下来: XC:背景的移动变更. YXF:远距离攻击实现. W:人物按住移动的收尾, 以及随机生成怪物. 这个进展还算顺利, 我的移动做完了, 不过交给他们的时候, 他们提到了关于帧延迟的问题, 参数要改一下, 随机怪有bug, 还没找出来, YDS的貌似在做,…
Python全栈开发[基础二] 本节内容: Python 运算符(算术运算.比较运算.赋值运算.逻辑运算.成员运算) 基本数据类型(数字.布尔值.字符串.列表.元组.字典) 其他(编码,range,for,while) Python 运算符 1.算术运算: 2.比较运算: 3.赋值运算: 4.逻辑运算:  5.成员运算: 基本数据类型 1.数字 int(整型) 数字 int ,所有的功能,都放在int里 a1 = a1 = - int 将字符串转换为数字 a = " print(type(a),…
本系列博客介绍以python+pygame库进行小游戏的开发.有写的不对之处还望各位海涵. 前几期博客我们一起学习了,pygame中的冲突检测技术以及一些常用的数据结构. 这次我们来一起做一个简单的酷跑类游戏综合运用以前学到的知识. 程序下载地址:http://yunpan.cn/cLIcJgTvq4tZS 访问密码 901f 源代码网盘地址:http://yunpan.cn/cLIc67S4nNRFY 访问密码 c139 github地址:https://github.com/XINCGer/…