The ZMQ communication between processes is the natural target for asyncio:
administrative thread worker process
│ │
│ ZMQ send(task) │
├───────────────────────────────────►│
│ │ calculate()
│ │
│ thread waits │
│ thread waits │
│ thread waits │
│ │
│◄───────────────────────────────────┤
│ ZMQ recv(result) │
The ZMQ communication between processes is the natural target for asyncio: