首页 > 解决方案 > 为什么`multiprocessing.Process.start`会这样?

问题描述

我有一个清单:

mylist = list(range(10))

和一个功能:

def change():
    for i, _ in enumerate(mylist):
       mylist[i] = 0

当我执行下面的代码时:

multiprocessing.Process(target=change).start()
print(mylist)
print(multiprocessing.active_children())

输出是:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[]

因此,该过程结束,但它不会更改列表的元素,mylist.

但是当我用线程执行确切的代码时:

threading.Thread(target=change).start()

它确实改变了列表。但在我的上下文中,我特别需要使用进程而不是线程。

此外,如果我打电话multiprocessing.Process.run而不是multiprocessing.Process.start,它也“有效”,但它是阻塞的。为什么它会这样工作?

标签: pythonpython-3.xmultiprocessing

解决方案


推荐阅读