gpt4 book ai didi

python - 在多个实时线程之间共享字典

转载 作者:行者123 更新时间:2023-12-01 05:41:17 26 4
gpt4 key购买 nike

我有一个 Python (2.7) 应用程序,在其中运行多个线程。现在我想更新我的子线程中的字典并在我的母线程中使用其更新的内容而不使用 join() 。我可以这样做吗?我不想等到我的 child 终止后才在我的母线程中使用字典的数据。

我该怎么做?

最佳答案

您可以使用threading modulethread module .

这是使用线程模块的示例:

import thread

d = dict()
m = thread.allocate_lock()

def foo():
m.acquire_lock()
print(d['key'])

def bar():
d['key'] = 'value'
m.release_lock()

if __name__ == '__main__':

m.acquire_lock()
t1 = thread.start_new_thread(foo,())
t2 = thread.start_new_thread(bar,())

这说明了锁如何同步线程对共享资源的访问:只要 m 被锁定,foo 就会等待获取它;同时,bar更新字典并释放锁;只有这样 foo 才会获取锁并继续。没有加入。

(当然,这不是你应该如何编写多线程代码...)

编辑

如果您必须使用进程,您可以在multiprocessing module中找到类似的功能。 .

这是一个例子:

import multiprocessing

def foo(m, d):
m.acquire()
print(d['key'])

def bar(m, d):
d['key'] = 'value'
m.release()

if __name__ == '__main__':

manager = multiprocessing.Manager()

m = multiprocessing.Lock()
m.acquire()

d = manager.dict()

p1 = multiprocessing.Process(target=foo, args=(m, d))
p2 = multiprocessing.Process(target=bar, args=(m, d))

p1.start()
p2.start()

Lock 允许进程同步,Manager 允许列表和字典等复合类型的资源共享。

关于python - 在多个实时线程之间共享字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17477614/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com