在子进程中创建线程



在我的理解中,线程是进程下的一个单元。因此,如果我在python中使用多线程库,它将在主进程下创建线程(如果我错了请纠正我,因为我还在学习)。但是有没有一种方法可以在不同的进程或子进程下创建线程?因此,在一个进程中执行多线程是可能的,因为一个进程有自己的共享内存。举个例子,我有一个应用程序,它需要与3个进程并行运行。在每个进程中,我希望它并发运行并共享相同的内存空间。如果我们说这是可能的,这是否意味着我需要在我的函数中有一个线程代码,以便当我用不同的进程运行函数时,它将创建自己的线程?

p。s:我知道gil在进程中锁定了一个线程,但我好奇的是进程甚至可以创建自己的线程。

也不是专门针对python的。我只是想大致了解一下。

尽量不要混淆线程和进程。在python中,进程实际上是一个独立的程序,拥有自己的python解释器副本(至少在使用方法spawn创建新进程的平台上是这样,例如Window)。这些都是用multiprocessing库创建的。

一个进程可以有一个或多个线程。它们共享相同的内存并可以共享全局变量。这些是用threading库创建的。

创建一个单独的进程,并让该进程创建几个线程是完全可以接受的(尽管随着程序规模的增长,这可能更难管理)。

正如您提到的GIL,它不影响进程,因为它们每个都有自己的GIL。进程中的线程受到GIL的影响,但它们确实在不同的点上释放锁,这使得您的threading.Thread代码可以有效地"并发"运行。

但是有没有办法在不同的进程或子进程下创建线程?

是的

在每个进程中,我希望它并发运行并共享相同的内存空间。

如果您使用单独的进程,它们不共享相同的内存。您需要使用像multiprocessing.Queue这样的对象在进程或共享内存结构(如multiprocessing.Array)之间传输数据。

这是否意味着我需要在我的函数中有一个线程代码,以便当我用不同的进程运行函数时,它将创建自己的线程?

是的

相关内容

  • 没有找到相关文章

最新更新