使用Twisted + Cyclone + PyPy处理POST请求会导致内存泄漏吗?

罗恩·瑞特

经过大量调查,我发现在处理成千上万的HTTP POST请求后,内存泄漏。奇怪的是,内存泄漏仅在使用PyPy时发生。

这是一个示例代码:

from twisted.internet import reactor
import tornado.ioloop

do_tornado = False
port = 8888

if do_tornado:
    from tornado.web import RequestHandler, Application
else:
    from cyclone.web import RequestHandler, Application

class MainHandler(RequestHandler):
    def get(self):
        self.write("Hello, world")

    def post(self):
        self.write("Hello, world")

if __name__ == "__main__":
    routes = [(r"/", MainHandler)]
    application = Application(routes)

    print port
    if do_tornado:
        application.listen(port)
        tornado.ioloop.IOLoop.instance().start()
    else:
        reactor.listenTCP(port, application)
        reactor.run()

这是我用来生成请求的测试代码:

from twisted.internet import reactor, defer
from twisted.internet.task import LoopingCall

from twisted.web.client import Agent, HTTPConnectionPool
from twisted.web.iweb import IBodyProducer

from zope.interface import implements

pool = HTTPConnectionPool(reactor, persistent=True)
pool.retryAutomatically = False
pool.maxPersistentPerHost = 10
agent = Agent(reactor, pool=pool)

bid_url = 'http://localhost:8888'

class StringProducer(object):
    implements(IBodyProducer)

    def __init__(self, body):
        self.body = body
        self.length = len(body)

    def startProducing(self, consumer):
        consumer.write(self.body)
        return defer.succeed(None)

    def pauseProducing(self):
        pass

    def stopProducing(self):
        pass


def callback(a):
    pass

def error_callback(error):
    pass

def loop():
    d = agent.request('POST', bid_url, None, StringProducer("Hello, world"))
    #d = agent.request('GET', bid_url)
    d.addCallback(callback).addErrback(error_callback)


def main():
    exchange = LoopingCall(loop)
    exchange.start(0.02)

    #log.startLogging(sys.stdout)
    reactor.run()

main()

请注意,此代码不会随CPython或Tornado和Pypy泄漏!该代码仅在同时使用Twisted和Pypy时泄漏,并且仅在使用POST请求时才泄漏。

要查看泄漏,您必须发送数十万个请求。

请注意,设置PYPY_GC_MAX时,该过程最终会崩溃。

这是怎么回事?

罗恩·瑞特

原来,泄漏的原因是BytesIO模块。

这是模拟Pypy泄漏的方法。

from io import BytesIO
while True: a = BytesIO()

解决方法如下:https : //bitbucket.org/pypy/pypy/commits/40fa4f3a0740e3aac77862fe8a853259c07cb00b

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用Twisted + Cyclone + PyPy处理POST请求会导致内存泄漏吗?

来自分类Dev

使用OpenOCD刷新/运行Altera Cyclone IV

来自分类Dev

使用OpenMP编译会导致内存泄漏

来自分类Dev

使用OpenMP编译会导致内存泄漏

来自分类Dev

不使用匿名类添加操作侦听器会导致内存泄漏吗?

来自分类Dev

安全使用vector.emplace_back(new MyPointer); 向量内部故障会导致内存泄漏吗?

来自分类Dev

使用函数初始化静态向量会导致内存泄漏吗?

来自分类Dev

在闭包内部使用“自我”会导致内存泄漏吗?

来自分类Dev

在递归中使用引用会导致内存泄漏?

来自分类Dev

使用d3过渡会导致内存泄漏

来自分类Dev

避免使用$ rootScope。$ on-可能会导致内存泄漏

来自分类Dev

以相反的顺序使用fread()读取文件会导致内存泄漏?

来自分类Dev

使用Twisted Web Client发布具有多个参数的请求

来自分类Dev

如何处理Twisted中的POST请求?

来自分类Dev

Java内存使用情况-此语法正确还是会导致内存泄漏?

来自分类Dev

使用 twgl 和 framebuffers 会导致 GPU 内存泄漏并导致浏览器崩溃(附上 plunkr)

来自分类Dev

Cyclone Slider短代码不起作用

来自分类Dev

异步代码会导致内存泄漏吗?

来自分类Dev

NavigableMap的subMap会导致内存泄漏吗?

来自分类Dev

ConditionalWeakTable的值会导致内存泄漏吗?

来自分类Dev

该程序会导致内存泄漏吗?

来自分类Dev

内存泄漏会导致getaddrinfo EMFILE吗

来自分类Dev

双向WeakMap会导致内存泄漏吗?

来自分类Dev

NavigableMap的subMap会导致内存泄漏吗?

来自分类Dev

清空Array = []会导致内存泄漏吗?

来自分类Dev

节点使用临时表调用postgres函数会导致“内存泄漏”

来自分类Dev

返回ndarray的字典会导致使用Boost Python的内存泄漏

来自分类Dev

在非静态方法中使用静态成员是否会导致内存泄漏?

来自分类Dev

使用方法pushViewController:animated:是否会导致iOS中的内存泄漏?

Related 相关文章

  1. 1

    使用Twisted + Cyclone + PyPy处理POST请求会导致内存泄漏吗?

  2. 2

    使用OpenOCD刷新/运行Altera Cyclone IV

  3. 3

    使用OpenMP编译会导致内存泄漏

  4. 4

    使用OpenMP编译会导致内存泄漏

  5. 5

    不使用匿名类添加操作侦听器会导致内存泄漏吗?

  6. 6

    安全使用vector.emplace_back(new MyPointer); 向量内部故障会导致内存泄漏吗?

  7. 7

    使用函数初始化静态向量会导致内存泄漏吗?

  8. 8

    在闭包内部使用“自我”会导致内存泄漏吗?

  9. 9

    在递归中使用引用会导致内存泄漏?

  10. 10

    使用d3过渡会导致内存泄漏

  11. 11

    避免使用$ rootScope。$ on-可能会导致内存泄漏

  12. 12

    以相反的顺序使用fread()读取文件会导致内存泄漏?

  13. 13

    使用Twisted Web Client发布具有多个参数的请求

  14. 14

    如何处理Twisted中的POST请求?

  15. 15

    Java内存使用情况-此语法正确还是会导致内存泄漏?

  16. 16

    使用 twgl 和 framebuffers 会导致 GPU 内存泄漏并导致浏览器崩溃(附上 plunkr)

  17. 17

    Cyclone Slider短代码不起作用

  18. 18

    异步代码会导致内存泄漏吗?

  19. 19

    NavigableMap的subMap会导致内存泄漏吗?

  20. 20

    ConditionalWeakTable的值会导致内存泄漏吗?

  21. 21

    该程序会导致内存泄漏吗?

  22. 22

    内存泄漏会导致getaddrinfo EMFILE吗

  23. 23

    双向WeakMap会导致内存泄漏吗?

  24. 24

    NavigableMap的subMap会导致内存泄漏吗?

  25. 25

    清空Array = []会导致内存泄漏吗?

  26. 26

    节点使用临时表调用postgres函数会导致“内存泄漏”

  27. 27

    返回ndarray的字典会导致使用Boost Python的内存泄漏

  28. 28

    在非静态方法中使用静态成员是否会导致内存泄漏?

  29. 29

    使用方法pushViewController:animated:是否会导致iOS中的内存泄漏?

热门标签

归档