Niklaus Wirth在1995年提出的谚语:
«软件变得越来越慢,硬件变得更快»
我有一个设置,其中龙卷风被用作工人的传递.Tornado收到请求,该请求将此请求发送给N个工作人员,汇总结果并将其发送回客户端.哪个工作正常,除非由于某种原因发生超时 - 然后我有内存泄漏.
我有一个类似于这个伪代码的设置:
workers = ["http://worker1.example.com:1234/",
"http://worker2.example.com:1234/",
"http://worker3.example.com:1234/" ...]
class MyHandler(tornado.web.RequestHandler):
@tornado.web.asynchronous
def post(self):
responses = []
def __callback(response):
responses.append(response)
if len(responses) == len(workers):
self._finish_req(responses)
for url in workers:
async_client = tornado.httpclient.AsyncHTTPClient()
request = tornado.httpclient.HTTPRequest(url, method=self.request.method, body=body)
async_client.fetch(request, __callback)
def _finish_req(self, responses):
good_responses = [r for r in responses if not r.error]
if not good_responses:
raise tornado.web.HTTPError(500, "\n".join(str(r.error) for r in responses))
results = aggregate_results(good_responses)
self.set_header("Content-Type", "application/json")
self.write(json.dumps(results))
self.finish()
application = tornado.web.Application([
(r"/", MyHandler),
])
if __name__ == "__main__": …
Run Code Online (Sandbox Code Playgroud) 我最近阅读了这份文档,其中列出了可用于实现套接字服务器的一些策略.即,它们是:
现在,我将非常感谢CPython中应该使用的提示,我们知道它有一些好处和一些不好的地方.我最感兴趣的是高并发性下的性能,是的,当前的一些实现太慢了.
因此,如果我可以从容易的那个开始,"5"就出来了,因为我不会在内核中乱砍任何东西.
"4"看起来因为GIL而必须出局.当然,你可以在这里使用多处理来代替线程,这确实会带来显着的提升.阻止IO还具有易于理解的优点.
在这里,我的知识有所减弱:
"1"是传统的选择或民意调查,可以简单地与多处理相结合.
"2"是准备变更通知,由较新的epoll和kqueue使用
"3"我不确定是否有任何具有Python包装器的内核实现.
所以,在Python中我们有一大堆很棒的工具,比如Twisted.也许它们是一种更好的方法,虽然我已经对Twisted进行了基准测试,但在多处理器机器上发现它太慢了.我不知道,或许有4个带有负载平衡器的扭曲可能会这样做.任何意见,将不胜感激.
zend框架有许多我不需要的组件/服务,它有很多包含.所有这些我认为减慢了应用程序.你知道如何加快它吗?可能是删除未使用(什么是常见的)组件,或将文件合并到一个文件?
当然软件并没有耗尽,但几十年前人们普遍认为,应用程序生命周期代码维护的后期引入了更多的错误,而不是修复.
但浴盆曲线适用于现代与开发的软件的现代软件工程方法?
$sudo pip3 install m2crypto
Collecting m2crypto
Using cached M2Crypto-0.26.0.tar.gz
Requirement already satisfied: typing in /usr/local/lib/python3.5/dist-packages (from m2crypto)
Installing collected packages: m2crypto
Running setup.py install for m2crypto ... error
Complete output from command /usr/bin/python3 -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-ejd_4lk_/m2crypto/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-ecxgdei0-record/install-record.txt --single-version-externally-managed --compile:
running install
running build
running build_py
copying M2Crypto/BIO.py -> build/lib.linux-x86_64-3.5/M2Crypto
copying M2Crypto/DH.py -> build/lib.linux-x86_64-3.5/M2Crypto
copying M2Crypto/Rand.py -> build/lib.linux-x86_64-3.5/M2Crypto
copying M2Crypto/ftpslib.py -> build/lib.linux-x86_64-3.5/M2Crypto
copying M2Crypto/m2.py -> build/lib.linux-x86_64-3.5/M2Crypto
copying M2Crypto/m2xmlrpclib.py -> build/lib.linux-x86_64-3.5/M2Crypto
copying M2Crypto/callback.py …
Run Code Online (Sandbox Code Playgroud) 我IOError: request data read error
在3G网络上传数据时随机进入Django的POST处理程序.Django提出该特定异常的问题已经得到解答(摘要:据称当客户端丢弃TCP连接时发生).但是,在我的情况下,我正试图解决潜在的问题.
从我试图缩小问题的范围来看,我发现:
3G
,H
和H+
(UMTS,HSDPA和HSPA +)我猜测那里发生的事情就是切换塔.那么当3G在塔之间切换时,TCP连接会发生什么?
Sentry提供了很好的图表来显示消息频率,但很少有关于它们实际显示的信息.
这些消息是每分钟吗?5分钟?15分钟?小时?
内联直接关系很容易,但是如何为更深层次的关系创建内联?
让我们说情况就像
class A(models.Model):
...
class B(models.Model):
a = models.ForeignKey(A)
class C(models.Model):
b = models.ForeignKey(B)
Run Code Online (Sandbox Code Playgroud)
现在我想要的是内联管理员A
,它将显示所有C
相应B
名称的内容.我怎么做?
我有基于"结构化DSL"概念的代码.
// vars/buildStuff.groovy
def call(body) {
def config = [:]
body.resolveStrategy = Closure.DELEGATE_FIRST
body.delegate = config
body()
node {
assert env
assert params
doStuff()
}
}
Run Code Online (Sandbox Code Playgroud)
在这段代码中我能访问env
和params
直接,符合市场预期.
但是在顶层Jenkinsfile
:
buildStuff {
someParam=params.SOME_PARAM
buildId=env.BUILD_ID
}
Run Code Online (Sandbox Code Playgroud)
原因java.lang.NullPointerException: Cannot get property 'SOME_PARAM' on null object
.我必须通过写这个来解决这个问题:
buildStuff {
someParam=this.params.SOME_PARAM
buildId=this.env.BUILD_ID
}
Run Code Online (Sandbox Code Playgroud)
为什么会这样?根据所有的例子管道的文件,我应该能够访问env
和params
直接.我究竟做错了什么?
python ×4
asynchronous ×2
performance ×2
3g ×1
c10k ×1
django ×1
django-admin ×1
groovy ×1
jenkins ×1
m2crypto ×1
memory-leaks ×1
networking ×1
php ×1
pip ×1
python-3.x ×1
qa ×1
sentry ×1
sockets ×1
tcp ×1
tornado ×1