我可以在多进程程序的每个进程上执行多线程吗?
例如,假设我有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()
这不是针对特定项目的,只是出于我的常识。 谢谢
答案 0 :(得分:0)
是的,每个Process
都可以在自己的Thread
对象中生成。实际上,当您在不使用Thread
模块的情况下使用multiprocessing
时,您会亲眼目睹这是因为您的主脚本正在其自己的进程中运行,并且正在生成Thread
!但是,拥有多个进程(每个进程都有自己的线程)将很快变得难以管理共享内存(主要是因为进程具有单独的内存),并且您必须非常小心以避免死锁。您的脚本可能很长,无法完成使用此技术的有用操作。我认为总体上最好坚持一个或另一个。引用this post that you would probably be interested in:
生成进程比生成线程要慢一些。它们一旦运行,就不会有太大的区别。