我正在使用 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 上
有没有办法跨多处理和线程分发可编辑的全局变量字符串?
您提供了一些有关代码的详细信息; OP不提供 repex.
跨线程很简单。 尽管您可能想使用互斥锁来保护访问。
跨进程意味着写入文件描述符, 例如管道或 mmap 文件。 最简单的事情是将行附加到日志文件中, 或在关系数据库中插入行。