是否可以创建一个可以同时执行更多操作的程序(例如python)?例如:
import time
while True:
time.sleep(30)
#do something that require some seconds. time.sleep just for example
但是同时执行其他操作,例如检查时钟,如果时间是12:00,则打印“是12:00”。
那可能吗?
操作系统可能会做类似的事情吗?
答案 0 :(得分:2)
是的,这很有可能。
multithreading和multiprocessing包可用于同时执行多项操作。
通常,当要串联执行的操作是“ IO绑定的”(例如,在套接字上等待或磁盘写入)时,将使用多线程。当操作处于“ CPU受限”状态时(例如进行计算),将使用多处理。
这两个需求之所以出现是因为CPython(最常见的实现)使用了全局锁:全局解释器锁(GIL)。该锁可以防止即使在不同的线程上也同时执行多条指令。如果您使用的其他实现没有GIL,则在两种情况下都可以使用多线程。如文档页面所述,多处理仅用于绕开锁定。
答案 1 :(得分:1)
是的,您可以执行此操作,并且有多种方法可以执行此操作:
多处理,多线程,并行处理。为此,有multiprocessing和joblib之类的python模块。
Joblib是一个比多处理模块更高级别的模块。因此,如果您开始探索这些概念,则建议从多处理开始。这样,您将了解多处理的复杂细节。
多处理:每个系统具有多个处理器,可以并行执行多组指令的可用性称为多处理。
多线程:一个进程分为几个不同的子进程,称为线程,它们具有自己的执行路径。这个概念称为多线程。
在多处理中,您可以通过多种方式在单个程序中部署多个任务。您可以使用“池”,该池提供了一种便利的方法,可以跨多个输入值并行执行函数,跨进程分配输入数据(数据并行性)。
然后有一个“映射”,该映射基本上将功能应用于可迭代的每个项目,并返回结果列表。如果传递了其他可迭代参数,则函数必须采用那么多参数,并且并行地将其应用于所有可迭代对象的项。然后,还有更多的方法可以通过使用系统的所有核心来分配多个任务。
多重处理中还有其他功能,可让您完全控制执行“任务”或“任务”的方式。您可以在documentation中阅读它们。
请注意,我在“多处理”模块中使用了“并行”一词。但是请理解,并行处理和多处理是不同的事情。
多处理是一种处理技术,其中在一台计算机中的多个处理器或多个处理核心各自在不同的工作上工作。
并行处理是一种处理技术,其中一台计算机中的多个处理器或多个处理核心可以协同工作,从而更快地完成一项工作。
多线程可以在单核计算机上工作吗-是的!