我有一个通过API获取数据的程序。我创建了一个只将目标数据作为参数的函数,并使用for-loop
运行该方法10次
程序需要相当长的时间来显示数据,因为下一个函数调用只在之前的函数完成其工作时发生
我想使用线程,使这一切发生得更快。然而,我很困惑。我在realpython.org上读到:
线程是一个单独的执行流这意味着您的程序将同时发生两件事。但是对于大多数Python 3实现来说,不同的线程实际上不会同时执行:它们只是看起来像是在执行。人们很容易把线程看作是在程序上运行两个(或更多)不同的处理器,每个处理器同时执行一个独立的任务。几乎是这样。线程可能在不同的处理器上运行,但一次只能运行一个
首先他们说:“这意味着你的程序将同时发生两件事”,然后他们说“但一次只能运行一件事”。所以我的线程不是同时完成的
我想决定是使用线程还是多处理,但我想不通
有人能帮忙吗
对于两个线程或多进程,您必须假设程序的执行可以从一个线程/进程随机跳转到另一个线程/进程。区别在于,对于线程,代码永远不会真正同时执行。这意味着总是只有一个CPU核心在做你的工作。通过多处理,您的代码可以同时在多个核上运行。因此,使用N个进程,只有多处理才能使计算速度加快N倍。(当然会有一些开销。)如果您没有进行任何繁重的计算,但需要创建并行运行的幻觉,请使用线程。这对于GUI特别有用
令人困惑的是,IO(例如从web复制文件或加载内容)不受CPU限制,因为它不需要大量CPU指令。因此,始终使用线程来完成此操作。要进一步了解它,您应该意识到,当线程等待IO操作完成时,它实际上处于阻塞状态。这允许其他线程运行。因此,如果使用线程获取数据,第一个线程将开始加载数据,然后阻塞。这为第二个线程提供了执行相同操作的空间,依此类推。当其中一个线程准备好数据时,它将解除阻塞,运行其其余代码并完成。 (请注意,当多个线程正在运行时,它们可以随机暂停,并为其他线程留出运行一段时间的空间,然后继续运行。(请参阅此答案的第一句。)
通常总是使用线程,除非您需要并行执行一些CPU繁重的任务。当涉及到如何在内部工作时,多处理有很多限制,并且使用它更为复杂和繁重
这只适用于Python的一些实现,例如最常用的“官方”实现CPython。在其他语言或不太常见的Python实现中,线程通常能够同时在多个内核上执行指令
相关问题 更多 >
编程相关推荐