나는 수학 요청을 처리하는 간단한 Twisted 웹 서버 응용 프로그램을 가지고 있습니다. 잘 작동 모든 (내 질문에 관련이없는 큰 코드 조각을 숨기) :Twisted _delayed 요청 내 멀티 스레드 호출
#import section ...
class PlsPage(Resource):
isLeaf = True
def render_POST(self, request):
reactor.callLater(0, self._delayedRender, request)
return NOT_DONE_YET
def _delayedRender(self, request):
#some actions before
crossval_scores = cross_validation.cross_val_score(pls1, X, y=numpy.asarray(Y), scoring=my_custom_scorer, cv=KFold(700, n_folds=700))
#some actions after
request.finish()
reactor.listenTCP(12000, server.Site(PlsPage()))
reactor.run()
내가 3
crossval_scores = cross_validation.cross_val_score(pls1, X, y=numpy.asarray(Y), scoring=my_custom_scorer, cv=KFold(700, n_folds=700), n_jobs=3)
이후에, 예를 들어 n_jobs
를 설정하여 cross_validation
계산 속도를하려고
twisted.internet.error.CannotListenError : 수신 대기 할 수 없음 : 12000 : [Errno 10048] 각 소켓 주소 (프로토콜/네트워크 주소/포트)의 한 가지 용도 만 정상적으로 허용됩니다. .
_delayedRender에서 n_jobs> 1 인 cross_val_score를 호출 할 수없는 이유가 있습니다. 몇 가지 이유 때문에 reactor.listenTCP가 3 번 시작하려고하는 예외의 추적입니다.
모든 아이디어를 어떻게 작동하려면?
UPD1. 나는 PLS.py을 파일을 생성하고 마지막 두 줄을 제외하고, 여기에 모든 코드를 이동 :이
from twisted.web import server
from twisted.internet import reactor, threads
import PLS
reactor.listenTCP(12000, server.Site(PLS.PlsPage()))
reactor.run()
하지만 문제가 지속. 또한이 문제는 Windows에서만 지속되는 것으로 나타났습니다. 내 리눅스 머신은이 스크립트를 잘 실행한다.
설명해 주셔서 감사합니다. 그러나 문제는 여전히 지속되며 질문을 업데이트했습니다. 나는 또한 Windows에서만 예외가 있다는 것을 발견했다. 내 리눅스 서버는이 코드를 잘 실행한다. –
Windows에서 "주 코드"는 다중 처리를 할 때'if __name__ == '__main __''에 의해 보호되어야합니다. 이것은 매우 잘 알려진 문제입니다. 그것을 위해 Google. –
Thanks Glyph, @larsmans, 이제 작동합니다. –