我正在使用 OpenERP,一个基于 Python 的 ERP,它使用不同的线程(每个客户端一个线程等)。我想使用 multiprocessing.Process() 来 fork() 并调用一个长时间运行的方法。
我的问题是:父母的线程会发生什么?它们会被复制并继续运行吗?子进程会在服务器套接字上调用 accept() 吗?
谢谢你的回答,
我正在使用 OpenERP,一个基于 Python 的 ERP,它使用不同的线程(每个客户端一个线程等)。我想使用 multiprocessing.Process() 来 fork() 并调用一个长时间运行的方法。
我的问题是:父母的线程会发生什么?它们会被复制并继续运行吗?子进程会在服务器套接字上调用 accept() 吗?
谢谢你的回答,
分叉不复制线程,只复制主线程。因此,在分叉多线程应用程序时要非常小心,因为它可能会导致不可预知的副作用(例如,当某个线程在互斥的关键部分中执行时发生分叉时),除非您知道您的代码,否则您的分叉进程中确实可能会被破坏。理想地分叉。
尽管我上面所说的一切都是正确的,但有一个名为 pthread_atfork() 的解决方法(至少在 Linux 上),它在进程被分叉时充当回调(您可以重新创建所有需要的线程)。尽管它适用于 C 应用程序,但不适用于 Python 应用程序。
如需更多信息,您可以参考: