-
在Unix上,一个进程结束,如果没有被join,就会变成僵尸进程。但是每一次一个新的进程启动,所有已经完成还没有join的进程都会被join,调用进程的is_alive()方法也会join进程,所以在大多数时候没有显式调用进程的join方法是没有问题的,但是最好显式调用进程对象的join方法。
-
在一个进程中put
item到queue中,这个进程在终止之前会一直等待直到queue中的item被消费掉。这意味着要确保在队列中的item被完全消费掉之后再调用进程的join方法,否则可能会导致死锁。def f(q): q.put('X' * 1000000) if __name__ == '__main__': queue = Queue() p = Process(target=f, args=(queue,)) p.start() p.join() # 这里导致死锁 因为进程先join了 obj = queue.get() ```
-
在Unix上,子进程可以使用父进程创建的全局对象作为共享资源来使用,但是最好把共享资源作为参数传递给子进程的构造函数,这样除了和Windows上的代码兼容,还可以防止资源在父进程中被垃圾回收了。
Python多进程编程指南
最新推荐文章于 2024-07-12 16:16:27 发布