我新的扭曲,試圖寫我的第一個應用程序,我居然堅持了這個問題:扭曲deferToThread TCP連接
我有一個加載了一堆模塊運行的主線程,放入系統中的每一個模塊位於遠程服務器,並可以通過一個TCP連接,這裏什麼模塊運行的代碼如下所示:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import socket
import struct
from twisted.internet import endpoints
from twisted.internet.defer import inlineCallbacks
from twisted.spread import pb
from txapp.core import get_modules
from txmod.spread import EnvelopeSpreadReceiver
@inlineCallbacks
def listen(reactor):
modules = yield get_modules()
for mod in modules:
endpoint = endpoints.serverFromString(reactor, 'tcp:%d:%s' %
(int(mod.get('module_server_port') or 0),
socket.inet_ntoa(struct.pack('!L', mod.get('module_server_ipaddr'))),))
endpoint.listen(pb.PBServerFactory(EnvelopeSpreadReceiver()))
print 'PBServerFactory starting on %s:%d for module %s' % (
socket.inet_ntoa(struct.pack('!L', mod.get('module_server_ipaddr'))),
int(mod.get('module_server_port')),
mod.get('module_name'))
def main():
from twisted.internet import reactor
listen(reactor)
reactor.run()
if __name__ == "__main__":
main()
給定服務器可以在不同的端口運行多個模塊,但通常這將是:1個服務器,1個模塊
運行應用程序的主服務器將嘗試連接到每個模塊,運行代碼並期望結果(成功與否)。
我在如何使此代碼無法阻塞的問題上苦苦掙扎:如果服務器無法響應,tcp連接可能會掛起,所以我應該將每個模塊的tcp連接放在與deferToThread
分開的線程上?
主應用程序將每天處理數百萬個請求,所以它應該是完全不阻塞的。
這是處理這個問題的正確方法嗎?有人能指出我如何實現這一目標的正確方向嗎?
非常感謝你;) – kitensei