分叉后运行线程会发生什么?

时间:2012-10-10 13:15:10

标签: python multithreading multiprocessing openerp

我正在使用基于Python的ERP OpenERP,它使用不同的线程(每个客户端一个线程等)。我想使用multiprocessing.Process()来fork()并调用一个长时间运行的方法。

我的问题是:父母的线程会发生什么?他们会被复制并继续运行吗?子进程是否会在服务器套接字上调用accept()?

感谢您的回答,

1 个答案:

答案 0 :(得分:3)

分叉不复制线程,只复制主线程。因此,非常小心分叉多线程应用程序,因为它可能导致不可预测的副作用(例如,当某个线程在一个互斥的临界区执行时发生分叉时),在分叉进程中确实可以破坏某些东西,除非你知道你理想的代码。

虽然我上面说的所有内容都是正确的,但是有一个名为pthread_atfork()的解决方法(至少在Linux上),它在分叉进程时充当回调(您可以重新创建所有需要的线程)。虽然它适用于C应用程序,但它不适用于Python应用程序。

有关详细信息,请参阅: