擅长:python、mysql、java
<p>我设法找到了一个解决办法,同时还保留了<code>asyncio</code>和<code>multiprocessing</code>库,而没有任何其他库</p>
<p>首先,由于<code>StreamReader</code>和<code>StreamWriter</code>对象是不可拾取的,因此我不得不使用<code>socket</code>。这很容易通过一个简单的功能实现:</p>
<pre><code>def get_socket(writer: StreamWriter):
fileno = writer.get_extra_info('socket').fileno()
return socket.fromfd(fileno, AddressFamily.AF_INET, socket.SOCK_STREAM)
</code></pre>
<p>套接字被插入到共享对象中(例如<code>Manager().dict()</code>或者甚至是一个自定义类,您必须通过自定义<code>BaseManager</code>实例注册该类)。现在,由于应用程序基于<code>asyncio</code>构建并利用库提供的流,我们可以通过以下方式轻松地将<code>socket</code>转换回一对<code>StreamReader</code>和<code>StreamWriter</code>:</p>
<pre><code>node_reader, node_writer = await asyncio.open_connection(sock=self.node_sock)
node_writer.write(mesg_text)
await node_writer.drain()
</code></pre>
<p>其中<code>self.node_sock</code>是通过共享对象传递的<code>socket</code>实例</p>