联合国多处理程序设计指南

2024-05-19 22:10:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图理解以下准则:

Better to inherit than pickle/unpickle

When using the spawn or forkserver start methods many types from multiprocessing need to be picklable so that child processes can use them. However, one should generally avoid sending shared objects to other processes using pipes or queues. Instead you should arrange the program so that a process which needs access to a shared resource created elsewhere can inherit it from an ancestor process.

  • “安排节目”是什么意思?在
  • 如何通过继承来共享资源?在

我运行的是windows,所以产生了新的进程,这是否意味着只有分叉的进程可以继承?在


Tags: orthetofromsothat进程process
1条回答
网友
1楼 · 发布于 2024-05-19 22:10:54

1。“安排节目”是什么意思?在

这意味着您的程序应该能够独立运行,而不需要任何外部资源。共享文件会给您带来锁定问题,共享内存会造成同样的问题,或者会由于多个进程同时修改数据而导致损坏。在

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

while some_queue_is_not_empty():
    run_external_process(some_queue)

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

对比:

^{pr2}$

这样可以避免锁定队列和/或由于多个进程获取同一项而导致的损坏问题。在

2。如何通过继承来共享资源?在

在Windows上,你不能。在Linux上,你可以使用你父母打开的文件描述符,在Windows上,这将是一个全新的进程,所以除了给你的文件之外,你没有任何来自你父母的东西。在

复制自:http://rhodesmill.org/brandon/2010/python-multiprocessing-linux-windows/

from multiprocessing import Process
f = None

def child():
    print f

if __name__ == '__main__':
    f = open('mp.py', 'r')                                                      
    p = Process(target=child)
    p.start()
    p.join()

在Linux上,您将获得以下内容:

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

在Windows上,您将获得:

C:\Users\brandon\dev>python mp.py
None

相关问题 更多 >