Python 多处理编程指南不明确

Python 多处理编程指南不明确,python,multiprocessing,Python,Multiprocessing,我试图理解以下准则: 使用spawn或forkserver start方法时,多处理中的许多类型都需要可拾取,以便子进程可以使用它们。但是,通常应避免使用管道或队列将共享对象发送到其他进程。相反,您应该安排程序,以便需要访问在别处创建的共享资源的进程可以从祖先进程继承它 “安排节目”是什么意思 如何通过继承共享资源 我正在运行windows,因此新进程会生成,这是否意味着只有分叉的进程才能继承?1。“安排节目”是什么意思? 这意味着您的程序应该能够在没有任何外部资源的情况下独立运行。共享文件

我试图理解以下准则:

使用spawn或forkserver start方法时,多处理中的许多类型都需要可拾取,以便子进程可以使用它们。但是,通常应避免使用管道或队列将共享对象发送到其他进程。相反,您应该安排程序,以便需要访问在别处创建的共享资源的进程可以从祖先进程继承它

  • “安排节目”是什么意思
  • 如何通过继承共享资源
我正在运行windows,因此新进程会生成,这是否意味着只有分叉的进程才能继承?

1。“安排节目”是什么意思? 这意味着您的程序应该能够在没有任何外部资源的情况下独立运行。共享文件会给您带来锁定问题,共享内存也会带来锁定问题,或者由于多个进程同时修改数据而导致损坏

下面是一个坏主意的例子:

while some_queue_is_not_empty():
    run_external_process(some_queue)

def external_process(queue):
    item = queue.pop()
    # do processing here
与:

while some_queue_is_not_empty():
    item = queue.pop()
    run_external_process(item)

def external_process(item):
    # do processing here
通过这种方式,您可以避免由于多个进程获取同一项而导致的队列锁定和/或损坏问题

2.如何通过继承共享资源? 在Windows上,您不能。在Linux上,你可以使用你的父母打开的文件描述符,在Windows上,这将是一个全新的过程,所以除了父母给你的东西,你没有任何东西

示例复制自:

在Linux上,您将得到如下结果:

$ python mp.py
<open file 'mp.py', mode 'r' at 0xb7734ac8>

注意:FWIW,发送非共享对象是合理的。在windows上可以通过多处理数组发送共享内存对象。请参阅:。
$ python mp.py
<open file 'mp.py', mode 'r' at 0xb7734ac8>
C:\Users\brandon\dev>python mp.py
None