小编var*_*tec的帖子

Wirth的定律是否仍然适用?

Niklaus Wirth在1995年提出的谚语:

«软件变得越来越慢,硬件变得更快»

  • 你认为这是真的吗?
  • 你应该如何衡量软件的"速度"?通过CPU周期或更确切地说,您需要完成一些任务?
  • 那么实际上变得更快更精简的软件(以CPU周期和MB的MB为衡量标准)和新版本的响应速度更快,比如Firefox 3.0与2.0相比,Linux 2.6与2.4相比,Ruby 1.9与1.8相比.或者全新的软件比旧的东西快(比如谷歌的V8引擎)?它不否定那个法律吗?

language-agnostic performance

10
推荐指数
5
解决办法
2712
查看次数

断开的连接上的龙卷风内存泄漏

我有一个设置,其中龙卷风被用作工人的传递.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)

python memory-leaks asynchronous tornado

10
推荐指数
1
解决办法
2704
查看次数

在Python中编写基于套接字的服务器,推荐策略?

我最近阅读了这份文档,其中列出了可用于实现套接字服务器的一些策略.即,它们是:

  1. 为每个线程提供许多客户端,并使用非阻塞I/O和级别触发的就绪通知
  2. 为每个线程提供许多客户端,并使用非阻塞I/O和准备就绪更改通知
  3. 为每个服务器线程提供许多客户端,并使用异步I/O.
  4. 为每个服务器线程提供一个客户端,并使用阻塞I/O.
  5. 将服务器代码构建到内核中

现在,我将非常感谢CPython中应该使用的提示,我们知道它有一些好处和一些不好的地方.我最感兴趣的是高并发性下的性能,是的,当前的一些实现太慢了.

因此,如果我可以从容易的那个开始,"5"就出来了,因为我不会在内核中乱砍任何东西.

"4"看起来因为GIL而必须出局.当然,你可以在这里使用多处理来代替线程,这确实会带来显着的提升.阻止IO还具有易于理解的优点.

在这里,我的知识有所减弱:

"1"是传统的选择或民意调查,可以简单地与多处理相结合.

"2"是准备变更通知,由较新的epoll和kqueue使用

"3"我不确定是否有任何具有Python包装器的内核实现.

所以,在Python中我们有一大堆很棒的工具,比如Twisted.也许它们是一种更好的方法,虽然我已经对Twisted进行了基准测试,但在多处理器机器上发现它太慢了.我不知道,或许有4个带有负载平衡器的扭曲可能会这样做.任何意见,将不胜感激.

python sockets asynchronous network-programming c10k

9
推荐指数
1
解决办法
6729
查看次数

什么是提高zend框架性能的最佳方法?

zend框架有许多我不需要的组件/服务,它有很多包含.所有这些我认为减慢了应用程序.你知道如何加快它吗?可能是删除未使用(什么是常见的)组件,或将文件合并到一个文件?

php performance zend-framework

8
推荐指数
1
解决办法
2461
查看次数

浴缸曲线适用于现代软件吗?

浴缸曲线
当然软件并没有耗尽,但几十年前人们普遍认为,应用程序生命周期代码维护的后期引入了更多的错误,而不是修复.

但浴盆曲线适用于现代与开发的软件的现代软件工程方法?

qa

8
推荐指数
1
解决办法
2434
查看次数

pip 安装 m2crypto 错误

$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)

python pip m2crypto python-3.x

8
推荐指数
3
解决办法
2万
查看次数

3G塔式交换机上的TCP连接会发生什么变化?

IOError: request data read error在3G网络上传数据时随机进入Django的POST处理程序.Django提出该特定异常的问题已经得到解答(摘要:据称当客户端丢弃TCP连接时发生).但是,在我的情况下,我正试图解决潜在的问题.

从我试图缩小问题的范围来看,我发现:

  • 在WiFi上无法再现
  • 仅在GPRS上不可重复
  • 可在各种类型的手机(包括Android和iPhone)和多个运营商上重现
  • 似乎在某些地方没有发生过
  • 似乎已经发生在其他地方,特别是当我看到数据速度指示器之间切换时3G,HH+(UMTS,HSDPA和HSPA +)

我猜测那里发生的事情就是切换塔.那么当3G在塔之间切换时,TCP连接会发生什么?

networking tcp 3g

7
推荐指数
1
解决办法
971
查看次数

解释Sentry频率图

Sentry提供了很好的图表来显示消息频率,但很少有关于它们实际显示的信息.

在此输入图像描述

这些消息是每分钟吗?5分钟?15分钟?小时?

python sentry

7
推荐指数
1
解决办法
286
查看次数

Django管理员内联深层关系

内联直接关系很容易,但是如何为更深层次的关系创建内联?

让我们说情况就像

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名称的内容.我怎么做?

django django-admin

6
推荐指数
1
解决办法
747
查看次数

为什么在Jenkinsfile的DSL闭包中使用`env`或`param`时需要关键字`this`

我有基于"结构化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)

在这段代码中我能访问envparams直接,符合市场预期.

但是在顶层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)

为什么会这样?根据所有的例子管道的文件,我应该能够访问envparams直接.我究竟做错了什么?

groovy jenkins jenkins-pipeline

6
推荐指数
1
解决办法
522
查看次数