2

スレッド内に遅い計算を入れようとすると、「Request.finish が呼び出された後に Request.write が要求に対して呼び出されました」というエラーが発生します。

私はすでに回答を見てきましたが、まったく同じ質問を見つけましたが、解決策はうまくいきませんでした。お知らせ下さい。

from twisted.web.server import Site, NOT_DONE_YET
from twisted.web.resource import Resource
from twisted.internet import reactor, threads
from twisted.python import log

import sys
import time


def SlowComputation():
    time.sleep(10)
    return "Lang Computation Result"


def FastComputation():
    return "Fast Computation Result"


class PerformComputation(Resource):
    def Success(self, request):
        request.write('Success')
        request.finish()

    def Failure(self, request):
        request.write('Failure')
        request.finish()

    def render_GET(self, request):
        if 'fast' in request.args:
            d = threads.deferToThread(FastComputation)
            d.addCallback(self.Success(request))
            return NOT_DONE_YET
        if 'slow' in request.args:
            d = threads.deferToThread(SlowComputation)
            d.addCallback(self.Success(request))
            return NOT_DONE_YET


log.startLogging(sys.stdout)
root = Resource()
root.putChild("calculate", PerformComputation())
factory = Site(root)
reactor.listenTCP(8880, factory, interface='localhost')
reactor.run()
4

1 に答える 1