使用下面的代碼似乎我可以使用multiprocessing.reduction很容易重建的子進程的套接字..扭曲 - 傳遞協議(和套接字句柄)對象扭子
import socket,os
import multiprocessing
from multiprocessing.reduction import reduce_handle, rebuild_handle
client = socket.socket()
client.connect(('google.com', 80))
rd = reduce_handle(client.fileno())
print "Parent: %s" % (os.getpid())
def test(x):
print "Child: %s" % (os.getpid())
build = rebuild_handle(x)
rc = socket.fromfd(build, socket.AF_INET, socket.SOCK_STREAM)
rc.send('GET/HTTP/1.1\n\n')
print rc.recv(1024)
p = multiprocessing.Process(target=test, args=(rd,))
p.start()
p.join()
我有一個扭曲遊戲服務器同時運行多個匹配。這些匹配可能包含多個玩家,每個玩家都有一個協議實例。我想要做的是在Twisted子流程池中分配匹配項,並讓這些池處理它們自己處理的匹配項的客戶端。看起來像讀取/寫入客戶端的數據,並將數據傳遞給子進程以及從子進程傳遞數據將是不必要的開銷。
協議保證是TCP實例,因此相信我能(如上面的代碼)降低這樣的插座:
rd = reduce_handle(myclient.transport.fileno())
一旦通過該數據以一個子通過查看扭曲源它看來我可以在子進程重建它現在這個樣子:
import socket
from twisted.internet import reactor, tcp
from multiprocessing.reduction import reduce_handle, rebuild_handle
handle = rebuild_handle(rd)
sock = socket.fromfd(handle, socket.AF_INET, socket.SOCK_STREAM)
protocol = MyProtocol(...)
transport = tcp.Connection(sock, protocol, reactor=reactor)
protocol.transport = transport
我只是想試試這個,但看到我不是超級熟悉的扭曲內部,即使這工作我真的不知道是什麼影響可能是。
誰能告訴我這是否看起來正確,它是否奏效?這是不明智的由於任何原因(我從來沒有見過扭曲的文檔或帖子中提到,即使它看起來很相關)?如果這有效,我應該警惕的任何事情?
在此先感謝。
'multiprocessing.reduction'似乎是跨平臺的(Windows和unix),只要你能夠到達Twisted中的原始套接字,而sendmsg似乎是特定於unix的。這是一個直接的缺點,但是,我不是在Windows上工作。除此之外,這一切都是有道理的。謝謝! – Salis 2014-09-22 07:41:53