Multiprocessing Value() 无法从 Process() 内的线程访问

问题描述 投票:0回答:1

我正在使用 Multiprocessing() 和 Threading() 进行并发。这个想法是从多个进程生成多个线程。线程需要访问使用 Value() 的全局变量,以便可以更改变量并跨进程分布(我假设是线程)。所以结构是:

from multiprocessing import Queue, Process, Value
dc = {A: Queue(cpu_count), B: Value(ctypes.c_wchar_p, '', lock = False), C: Value('i', 0, lock = False)}
Process1 as supplement process that spawns worker threads:
Threads1 as task_producer for Queue
Threads2 giving flag signal for KeyboardInterrupt dc[c].value
Process3-8 as main process that spawns multiple threads:
Threads1-4 from Process3-8 access dc[b].value to connect

但是一旦访问,加载

dc[b].value
时线程就会卡住。但是当打印
dc[b]
时,它起作用并提到 Value() 的存在:

c_wchar_p(2184070568752)

经过进一步检查,将

dc[c].value
Process1.Threads1
更改为与
Process3-8.Threads1-4
不同的结果。

##print(workers, dc[c].value)
Process1.Threads1 1
Process3-8,Threads1-4 0

我期望 Multiprocessing() 内的 Threading() 也可以访问从 Multiprocessing() 模块派生的 Value() 。因此,当调用 dc[b].value 时,它返回域字符串。有没有一种方法可以跨多处理和线程分发可编辑的全局变量字符串?

运行最新的python3.12 在 Windows 11 22H2 上

python python-3.x python-multiprocessing python-multithreading
1个回答
0
投票

有没有办法跨多处理和线程分发可编辑的全局变量字符串?

您提供了一些有关代码的详细信息; OP不提供 repex.

跨线程很简单。 尽管您可能想使用互斥锁来保护访问。

跨进程意味着写入文件描述符, 例如管道或 mmap 文件。 最简单的事情是将行附加到日志文件中, 或在关系数据库中插入行。

© www.soinside.com 2019 - 2024. All rights reserved.