首页 > 解决方案 > 用于从不同来源获取数据的 Python 异步或多线程?

问题描述

我有一个 Python 应用程序需要从 2-3 个不同的源(SQL Server、MongoDB 等)获取数据,它可以并行完成,因为我稍后只需将所有数据放在一起,并且每个请求不依赖在其他人身上。

我不知道哪种情况更适合这种情况 - 线程、进程或异步等待?

我读到差异主要在于 CPU 使用率和 I/O。但是,如果我只想同时(而不是按顺序)发出多个请求怎么办?当然,这里根本没有 CPU 使用率。

标签: pythonmultithreadingasync-awaitmultiprocessing

解决方案


我建议你看看python的内置线程模块......

...来自文档的引用:

CPython 实现细节:在 CPython 中,由于全局解释器锁,只有一个线程可以一次执行 Python 代码(即使某些面向性能的库可能会克服这个限制)。如果您希望您的应用程序更好地利用多核机器的计算资源,建议您使用 multiprocessing 或 concurrent.futures.ProcessPoolExecutor。但是,如果您想同时运行多个 I/O 密集型任务,线程仍然是一个合适的模型。

简而言之...多线程存在GIL(例如全局解释器锁定)的问题,但是您可以在此处阅读...

...执行 I/O 时始终释放 GIL。


推荐阅读