擅长:python、mysql、java
<p>不幸的是,多处理库不适合转换为asyncio,如果必须使用<code>BaseProxy</code>来处理IPC(进程间通信),那么您所能做的就是最好的了。在</p>
<p>虽然库在这里确实使用了阻塞I/O,但是您无法轻松地访问并重新处理阻塞部分以使用非阻塞原语。如果你坚持走这条路,你就必须修补或重写该库的内部实现细节,但作为内部实现细节,这些细节可能因Python的点发布而有所不同,这使得任何修补都很脆弱,而且容易因Python的小升级而中断。<code>_callmethod</code>方法是涉及线程、套接字或管道连接以及序列化程序的深层抽象层次的一部分。请参见<a href="https://github.com/python/cpython/blob/3.7/Lib/multiprocessing/connection.py" rel="noreferrer">^{<cd3>}</a>和<a href="https://github.com/python/cpython/blob/3.7/Lib/multiprocessing/managers.py" rel="noreferrer">^{<cd4>}</a>。在</p>
<p>因此,您可以选择使用当前的方法(使用线程池执行器将<code>BaseProxy._callmethod()</code>推到另一个线程)<em>o</em>r使用异步原语实现自己的IPC解决方案。您的中央数据库访问进程将充当其他进程作为客户机连接到的服务器,可以使用套接字或命名管道,对客户机请求和服务器响应使用约定的序列化方案。这就是<code>multiprocessing</code>为您实现的,但是您将使用<a href="https://docs.python.org/3/library/asyncio-stream.html#asyncio-streams" rel="noreferrer">^{<cd7>} <em>streams</em></a>和任何最适合您的应用程序模式的序列化方案(例如pickle、JSON、protobuffers或其他完全不同的东西)来实现您自己的(更简单的)版本。在</p>