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