Python通用多进程(无子进程)
我要么很难理解多进程库的逻辑,要么我遗漏了一些东西 以下两种说法正确吗Python通用多进程(无子进程),python,multiprocessing,Python,Multiprocessing,我要么很难理解多进程库的逻辑,要么我遗漏了一些东西 以下两种说法正确吗 除了SharedMemoryManager之外,多进程库不提供任何在进程之间共享数据的方法,除非所述进程是原始进程通过库本身生成的子进程 多进程管理器生成一个管理共享对象的服务器进程(即,它不使用共享内存) 第一点是基于我所看到的构造函数的签名的推断,但我不确定我是否正确,因为这意味着在最常见的多处理情况下(即,当进程不是主进程的子进程时),大多数库都是无用的 如果我是正确的,多进程基本上是一个奇怪的线程库,由于GIL的
您会说,“在最常见的多进程情况下(即,当进程不是主进程的子进程时),大多数库都是无用的。”正是在这种情况下,应该保护进程不受其他进程的窥视。它们仍然有通信机制(sockets、
SyncManager
等),但通信方式更加安全、可控。在我的共享服务器上,我的ISP一起阻止了共享内存服务。我猜ISP担心的是,如果你能猜到共享内存密钥,你就可以查看其他用户的内存。在很多情况下,你没有选择,而在其他情况下,你仍然会选择一个命名的共享内存部分,我想这就是库提供SharedMemoryManager对象的原因。问题是,从我从文档中了解到的情况来看,这对于我的用例来说太简单了。
# Imagine I make this hashable by defining __eq__ and __hash__
@dataclass
class Key:
field1: str
field2: str
# Only some member functions will be "public".
# Those will be the ones taking care of the locking.
@dataclass
class Value:
_array: List[float]
_num1: int
_num2: int
_multiprocess_lock: Lock
@dataclass
class CrossProcessDict:
my_dict1: Dict[Key, Value]
my_dict2: Dict[Key, Value]