python
import asyncio
from concurrent.futures import ThreadPoolExecutor
class WorkJob:
async def run(self):
await asyncio.gather(
self.function1(),
self.function2(),
)
async def run_in_thread(job):
loop = asyncio.get_event_loop()
with ThreadPoolExecutor() as executor:
await loop.run_in_executor(executor, job.run)
async def main():
jobs = [WorkJob(), WorkJob()] # Add more jobs as needed
await asyncio.gather(
*[run_in_thread(job) for job in jobs]
)
# Running the event loop
if __name__ == "__main__":
asyncio.run(main())
以上是一个实现多线程并行工作的代码。具体来说,ThreadPoolExecutor
允许多个线程并行运行任务,而 asyncio
的 run_in_executor
函数会将异步任务 offload
到线程池中的线程执行。因此,多个 WorkJob().run()
实例会被分配到不同的线程并行运行。
代码解析:
ThreadPoolExecutor
创建了一个线程池loop.run_in_executor
将WorkJob().run()
的执行offload
到线程池,从而并行运行。asyncio.gather
确保多个任务能够同时被调度。
在这种方式下,不同线程可以独立工作,因此可以更有效地处理 I/O 密集型任务或者需要并发的操作。