线程中的传递引用可变变量

Ala*_*ejo 4 python multithreading pass-by-reference multiprocessing

我有一个关于 Python 多线程的基本问题:我有一个列表,我需要在一个线程中修改它。我知道列表是可变类型:如何通过引用传递变量?

但是,当我使用线程时,列表的行为不像可变类型:

from multiprocessing import Process, Lock

def f(l, i, n):
    l.acquire()
    i.append(n)
    l.release()
    print "in:", i

if __name__ == '__main__':
    lock = Lock()

    i = []
    for num in range(10):
        p = Process(target=f, args=(lock, i, num))
        p.start()
        p.join()

    print "out:", i
Run Code Online (Sandbox Code Playgroud)

输出

in: [0]
in: [1]
in: [2]
in: [3]
in: [4]
in: [5]
in: [6]
in: [7]
in: [8]
in: [9]
out: []
Run Code Online (Sandbox Code Playgroud)

有人可以帮我解决这个问题吗?

fal*_*tru 5

该代码不使用线程,而是使用不共享内存的进程。

使用线程:

from threading import Thread, Lock  # <----

def f(l, i, n):
    l.acquire()
    i.append(n)
    l.release()
    print "in:", i

if __name__ == '__main__':
    lock = Lock()

    i = []
    for num in range(10):
        p = Thread(target=f, args=(lock, i, num))  # <----
        p.start()
        p.join()

    print "out:", i
Run Code Online (Sandbox Code Playgroud)