我试图用python设计一个mmo游戏......
我已经评估了stackless,因为它不是一般的python而且它是一个fork,我不想使用它
我试图在pysage candygram dramatis和parley之间做出选择
任何人尝试这些库中的任何一个?
非常感谢您的回复
所以我正在玩无堆栈的python,编写一个非常简单的网络服务器来教我自己用微线程/ tasklet编程.但现在我的问题是,当我ab -n 100000 -c 50 http://192.168.0.192/在apache工作台运行类似(100k请求,50并发)的东西时,我得到类似6k req/s的东西,第二次运行它我得到5.5k,第三次5k,第四次,4.5k等等一直到100req/s或者其他东西.
但是,当我重新启动python脚本时问题就消失了.
现在我的问题是为什么?我忘记删除tasklets了吗?我已经检查了stackless.getruncount()(由于某种原因它似乎总是返回1)所以它似乎不会有任何死的tasklet挂在身边?我试过在所有完成的tasklet上调用.kill(),没有帮助.我只是想不出这个.
import socket
import select
import stackless
import time
class socket_wrapper(object):
def __init__(self, sock, sockets):
super(socket_wrapper, self).__init__()
self.sock = sock
self.fileno = sock.fileno
self.sockets_list = sockets
self.channel = stackless.channel()
self.writable = False
self.error = False
def remove(self):
self.sock.close()
self.sockets_list.remove(self)
def send(self, data):
self.sock.send(data)
def push(self, bytes):
self.channel.send(self.sock.recv(bytes))
def stackless_accept(accept, handler, recv_size=1024, timeout=0):
sockets = [accept]
while True:
read, write, error = select.select(sockets, sockets, sockets, timeout)
for sock …Run Code Online (Sandbox Code Playgroud) 另外,如果不是python或java,那么你会更普遍地选择静态类型语言还是动态类型语言?
我想写一个基于网络的MMO游戏,允许用户编写AI并将其作为游戏的一部分运行.我计划将Html5用于图形,并希望它是基于网络的,因此可以从智能手机访问它.我需要找到一种支持沙盒,并发,热代码交换和大型库的编程语言,以使事情变得更容易.
这时候我的研究出现了Erlang,Stackless Python和Lua.任何帮助表示赞赏.
我正在重新开始游戏编程.10年前我在qbasic制作游戏,自那以后我就没有做任何游戏编程,所以我很生疏.我一直在编程,我现在是web开发人员/ DBA/admin.我有几个问题,但我会将它限制为每个帖子一个.
我正在进行的游戏将是一个庞大的,非常大的世界.它有点像URW,但更大的世界更像是一个'RPG'.
我一直在努力决定,是什么是布局地图,保存和访问地图的最佳方式.我想到了使用sqlite来存储数据的想法.我甚至可以使用sqlite db作为游戏的保存文件,既简单又好用.
任何人都有关于我应该如何处理这些或其他存储方法的想法的任何提示?
以下是我的游戏要求:
用于Visual Studio Beta的Python工具(包括对CPython的支持)是否允许您使用Stackless Python进行开发?
如果是这样,您是否可以扩展您的答案以包括设置无Stackless Python环境所需的任何步骤,而不是在现有的VS2010安装上安装PTVS?
我想学习python所以我从python站点下载它,我看到其他4种蟒蛇出现:
我真的可以找到它们之间的差异.还有哪一个是最好的开始.
我知道标准 CPython 对递归深度有限制,我认为小于 1000,所以下面的示例代码将失败并出现“超出最大递归深度”错误。
def rec_add(x):
if x == 0:
return x
else:
return x + add(x - 1)
print(rec_add(1000))
Run Code Online (Sandbox Code Playgroud)
听说 Stackless Python 支持无限递归深度,但是如果我用 Stackless Python 运行上面的代码,它仍然报告“超出最大递归深度”错误。我想也许我需要以某种方式修改代码以使其能够使用 Stackless Python 的无限递归深度功能?
知道如何在 Stackless Python 中进行无限递归吗?谢谢。
注意:我知道如何将标准 CPython 的递归深度限制增加到 1000 以上,并且我知道如何将上面的代码转换为简单的迭代,或者简单地使用高斯公式计算总和,这些不是我要找的,而上面的代码纯粹是作为例子。
编辑:就像我在上面的“注释”部分已经说过的那样(我猜没有人真正阅读过),我知道如何增加 CPython 的递归限制,并且我知道如何将示例代码转换为迭代或只是一个高斯和公式n * (n + 1) / 2,我只是在这里问,因为我听说 Stackless Python 的一大特色是它支持无限递归,我不知道如何为示例代码启用它。
EDIT2:我不确定我是否理解“Stackless Python 支持无限递归”的想法是错误的,但这里有一些来源说(或暗示)Stackless Python 支持无限递归:
https://bitbucket.org/stackless-dev/stackless/issues/96
https://stackless.readthedocs.io/en/3.6-slp/whatsnew/stackless.html
我正在考虑开发在线多人社交游戏.世界的共享状态在后端需要快速的东西,所以潜在的解决方案似乎是:
服务器上的快速游戏引擎(例如c ++)和一些前端语言(php/python/ruby)+ flash
python中的整个堆栈(使用twisted或stackless python)+ flash
.NET(asp.net或asp.net mvc)+ flash
.NET + silverlight
从生产力的角度来看,第一个可能是过度杀手(3个异质层)
NR.4可能是程序员的天堂(所有层的共同环境),但是:
你怎么看?
[编辑]游戏本身将成为更大的门户网站的一部分 - 因此将引擎与某些Web框架集成将是一件好事.
没有堆栈的python实现比Lua的协同程序有什么优势?它们的区别是什么?
python-stackless ×10
python ×8
stackless ×4
lua ×2
.net ×1
concurrency ×1
coroutine ×1
cpython ×1
erlang ×1
io ×1
ironpython ×1
java ×1
jython ×1
mmo ×1
multiplayer ×1
networking ×1
performance ×1
ptvs ×1
pypy ×1
python-3.x ×1
recursion ×1
sandbox ×1
silverlight ×1
sqlite ×1