在我的理解中,线程是进程下的一个单元。因此,如果我在python中使用多线程库,它将在主进程下创建线程(如果我错了请纠正我,因为我还在学习)。但是有没有一种方法可以在不同的进程或子进程下创建线程?因此,在一个进程中执行多线程是可能的,因为一个进程有自己的共享内存。举个例子,我有一个应用程序,它需要与3个进程并行运行。在每个进程中,我希望它并发运行并共享相同的内存空间。如果我们说这是可能的,这是否意味着我需要在我的函数中有一个线程代码,以便当我用不同的进程运行函数时,它将创建自己的线程?
p。s:我知道gil在进程中锁定了一个线程,但我好奇的是进程甚至可以创建自己的线程。
也不是专门针对python的。我只是想大致了解一下。
尽量不要混淆线程和进程。在python中,进程实际上是一个独立的程序,拥有自己的python解释器副本(至少在使用方法spawn创建新进程的平台上是这样,例如Window)。这些都是用multiprocessing
库创建的。
一个进程可以有一个或多个线程。它们共享相同的内存并可以共享全局变量。这些是用threading
库创建的。
创建一个单独的进程,并让该进程创建几个线程是完全可以接受的(尽管随着程序规模的增长,这可能更难管理)。
正如您提到的GIL,它不影响进程,因为它们每个都有自己的GIL。进程中的线程受到GIL的影响,但它们确实在不同的点上释放锁,这使得您的threading.Thread
代码可以有效地"并发"运行。
但是有没有办法在不同的进程或子进程下创建线程?
是的
在每个进程中,我希望它并发运行并共享相同的内存空间。
如果您使用单独的进程,它们不共享相同的内存。您需要使用像multiprocessing.Queue
这样的对象在进程或共享内存结构(如multiprocessing.Array
)之间传输数据。
这是否意味着我需要在我的函数中有一个线程代码,以便当我用不同的进程运行函数时,它将创建自己的线程?
是的