如果您使用称为multiprocess 的multiprocessing 的分支,那么它应该适用于您要发送的几乎任何连接对象。 fork 使用dill 而不是pickle,以提供更好的序列化。例如,这是一个sqlite3.Connection 对象。
>>> import sqlite3
>>> c = sqlite3.connect(':memory:')
>>> c
<sqlite3.Connection object at 0x1046134b8>
>>> import multiprocess
>>> p1,p2 = multiprocess.Pipe()
>>> p1.send(c)
>>> c_ = p2.recv()
>>> c_
<sqlite3.Connection object at 0x104af8200>
不清楚哪个连接对象是被询问的连接对象。所以这里有一个 _multiprocess.Connection 对象与来自 multiprocess 的 Pipe 一起传递。
>>> c = p1.__class__
>>> p1.send(c)
>>> c_ = p2.recv()
>>> c_
<type '_multiprocess.Connection'>
但是,在尝试传递 _multiprocess.Connection 对象实例时,而不是 _multiprocess.Connection 对象类……send 工作得很好,但很遗憾,recv 将无法解开该对象。
>>> p3,p4 = multiprocess.Pipe()
>>> p1.send(p3)
>>> p3_ = p2.recv()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/mmckerns/lib/python2.7/site-packages/dill-0.2.5.dev0-py2.7.egg/dill/dill.py", line 259, in loads
return load(file)
File "/Users/mmckerns/lib/python2.7/site-packages/dill-0.2.5.dev0-py2.7.egg/dill/dill.py", line 249, in load
obj = pik.load()
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 864, in load
dispatch[key](self)
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/pickle.py", line 1089, in load_newobj
obj = cls.__new__(cls, *args)
TypeError: Required argument 'handle' (pos 1) not found
>>>
如果最后一个案例有效,我认为你可以做一些非常酷的事情。也许值得向dill 或multiprocess 提交票证并请求它工作?