我可以在多过程程序的每个过程上进行多线程吗?
例如,假设我有4个可用的内核,我可以在这4个内核中添加30个线程吗?
这听起来可能令人困惑,所以这是一个示例代码,可以更好地显示我的问题
from multiprocessing import Process
from threading import Thread
if __name__ == "__main__":
processes = []
for i in range(4):
processes.append(Process(target=target))
for p in processes:
# Can I add threads on each of these processes
# p.append(Thread(target=target2))
p.start()
for p in processes:
p.join()
这不是针对特定项目,而只是为了我的一般知识。谢谢
是的,每个Process
都可以在自己的Thread
对象中产生。实际上,当您使用Thread
s没有multiprocessing
模块时,您会目睹这一点,因为您的主脚本是在自己的过程中运行的,并且会产生Thread
s!但是,要拥有许多带有自己线程的过程将很快变得复杂,但是要管理共享内存(主要是因为过程具有单独的内存(,并且您必须非常小心以避免僵局。您的脚本可能很长,可以完成此技术有用的事情。我认为通常最好坚持一个或另一个。引用您可能对此感兴趣的这篇文章:
产卵过程比产卵线程慢一点。一旦运行,就没有太大的区别。