标签: shared-state

如何使用Python中的Managers()在多个进程之间共享字符串?

我需要读取主进程中的multiprocessing.Process实例编写的字符串.我已经使用Managers和队列将参数传递给进程,因此使用Managers似乎很明显,但Managers不支持字符串:

Manager()返回的管理器将支持类型列表,dict,Namespace,Lock,RLock,Semaphore,BoundedSemaphore,Condition,Event,Queue,Value和Array.

如何使用多处理模块中的Managers共享由字符串表示的状态?

python shared-memory multiprocessing shared-state

14
推荐指数
2
解决办法
1万
查看次数

在模板实例之间共享静态成员?(不可能?)

我正在做一些可能很愚蠢的事情,但如果它奏效的话会很好.

我试图以一种方式专门化类型,我需要自己的查找结构本质上是全局的(但理想情况下封装为类变量),但我希望对象是类型安全的,因此它们是参数化的.

因此,基本上我有

template<class T, int N>
class SpecialArray
{
//...
private:
   static map<string, internal_t> lookupTable
}
Run Code Online (Sandbox Code Playgroud)

无论出于什么原因,我都没有想到,直到我说到初始化lookupTable时才说

template <class T, int N>
SpecialArray<T,N>::lookupTable;
Run Code Online (Sandbox Code Playgroud)

将会有许多不同的lookupTables附加到各种实例化SpecialArray.

我怀疑它可能只是一个梦想而且正确的答案只是让它成为一个单独的全局单例对象,但无论如何要使它成为lookupTable所有SpecialArrays中只有一个?

比如,在我脑海中的C++(这不是真正的C++)中,这就像是

template <class T, int N>
SpecialArray<*,*>::lookupTable;
Run Code Online (Sandbox Code Playgroud)

...但遗憾的是GCC并没有在我的脑海中编译C++

有没有任何实际的方法来获得我想要的东西(在C++ 0x-land或某处)?我可能会遇到一些静态方法来处理这个问题,这些方法操纵这个查找表(它不跟踪类型或Ns).

...对不起,如果这没有任何意义.

在此先感谢您提供任何帮助或同情.

c++ templates static-members shared-state

10
推荐指数
1
解决办法
1502
查看次数

如何在不依赖其他软件的情况下为多个工作人员的 Flask 应用程序提供共享状态?

我想为与多个工作人员(即多个进程)一起运行的 Flask 应用程序提供共享状态。

从关于这个主题的类似问题中引用这个答案

您不能使用全局变量来保存此类数据。[...] 使用 Flask 之外的数据源来保存全局数据。根据您的需要,数据库、memcached 或 redis 都是合适的独立存储区域。

(来源:flask 中的全局变量线程安全吗?如何在请求之间共享数据?

我的问题是关于如何在 Flask 的“外部”提供数据的建议的最后一部分。目前,我的网络应用程序非常小,我想避免对其他程序的要求或依赖。如果我不想在后台运行 Redis 或其他任何东西,而是提供 Web 应用程序的 Python 代码的所有内容,我有哪些选择?

python concurrency web-applications shared-state flask

9
推荐指数
1
解决办法
3065
查看次数

使用Python的multiprocessing.pool.map操作相同的整数

问题

我正在使用Python的多处理模块来异步执行功能。我想做的是能够跟踪每个进程调用和执行时脚本的总体进度def add_print。例如,我希望下面的代码在每次进程运行该函数时将其加1 total并打印出值(1 2 3 ... 18 19 20)。我的第一次尝试是使用全局变量,但这没有用。由于该函数是异步调用的,因此每个进程读取total为0开始,并独立于其他进程加1。因此,输出为20 1而不是递增值。

即使函数是异步运行的,我如何才能以同步方式从映射函数中引用相同的内存块?我的一个想法是以某种方式缓存total在内存中,然后在添加到时引用该确切的内存块total。这是python中一种可能且基本合理的方法吗?

请让我知道您是否需要更多信息或我的解释不够充分。

谢谢!


#!/usr/bin/python

## Import builtins
from multiprocessing import Pool 

total = 0

def add_print(num):
    global total
    total += 1
    print total


if __name__ == "__main__":
    nums = range(20)

    pool = Pool(processes=20)
    pool.map(add_print, nums)
Run Code Online (Sandbox Code Playgroud)

python asynchronous shared-memory multiprocessing shared-state

5
推荐指数
1
解决办法
1106
查看次数

如何更改 Alpine.js 中的共享状态?

我试图通过在调整窗口大小时更改共享状态来隐藏 DOM 内的多个元素。

<body class="font-body relative" x-data="{hideOnMobile:false}">
 <section class="mt-5" :class={'section' : !hideOnMobile , 'hidden' : hideOnMobile}">
   ...
  </section>
</body>
Run Code Online (Sandbox Code Playgroud)

当我尝试

window.onresize = function (event) {
   let data = document.querySelector('[x-data]');
         
       if (window.innerWidth > 639) {
           return data.__x.$data.hideOnMobile = true;
       }
    };
Run Code Online (Sandbox Code Playgroud)

它应该将状态 ** hideOnMobile** 更改为 true 但不知何故没有任何想法?

javascript shared-state alpine.js

4
推荐指数
1
解决办法
4999
查看次数

"消息传递/共享状态"困境(并发和分发)是否采取了"Holywar"的形式?

关于哪种模式更好的讨论状态我并不太了解,所以我想问一个非常直接的问题:看起来两个相反的观点真的出现了争议吗?例如,基于原型/类的OOP或动态与静态类型

(虽然这些都不是很合适的例子,我只是不知道如何更清楚地表达我的问题)

concurrency message-passing shared-state

3
推荐指数
1
解决办法
767
查看次数

共享可变状态:何时使用IORefs

我有一个写入Map和PSQ的主线程.在Map和PSQ中,我使用相同的密钥,以便通过查看PSQ,可以找到具有最小优先级的条目,其具有O(1)复杂度并且被映射到Map中的值.

现在,当我的主线程在需要时添加/修改Map和PSQ时,我有第二个线程,它经常(forever $ do)查看PSQ以确定最旧的键何时是N ms之前然后应该刷新它.

为此,两个线程都需要查看相同的可变数据.维持国家的最佳方式是什么?这是IOREfs的案例吗?还有什么方法可以解决这个问题?

这里的"一些"pre-alpha代码:

import Data.Time
import Data.Functor
import Data.Time.Clock.POSIX
import qualified Data.PSQueue as PSQ
import qualified Data.Map as Map
import Data.Maybe
import Control.Concurrent
import Control.Concurrent.MVar
import Control.Monad
import Network.Socket hiding (send, sendTo, recv, recvFrom)
import Network.Socket.ByteString
import qualified Data.ByteString.Char8 as B 

--PSQ = (host, PID) POSIXTime
--where the tuple is k and POSIXTime is p

--Map is (host, PortNumber) [messages]
--where the tuple is the key and [messages] is a list of messages

key …
Run Code Online (Sandbox Code Playgroud)

haskell shared-state ioref

2
推荐指数
1
解决办法
340
查看次数

CRDT 和 RAFT 协议之间是否存在关系——或者它们是正交的?

以多人网络游戏的用例为例。您立即就会遇到在网络上复制和协调共享状态的问题。

似乎有多种工具针对此问题的某个方面,其中两个工具似乎有重叠:

  1. 无冲突复制数据类型(CRDT) - 用于
  2. RAFT 共识算法-用于在分布式网络中选择事务领导者以帮助达成共识。

我的问题是:CRDT 和 RAFT 协议之间是否存在关系——或者它们是正交的?

distributed-computing distributed-system shared-state raft crdt

2
推荐指数
1
解决办法
945
查看次数

如何在使用IO时在Haskell中的两个函数调用之间共享IORef状态?

我正在努力学习Haskell,我正在玩IORef,我试图保存并查找记录.我的代码看起来像这样(注意我在这个例子中选择了"String"作为IORef类型只是为了方便和简介,在我的实际代码中我正在使用记录.而且还忽略我使用的是Set而不是一张地图,我会改变一下):

module MyTest where

import           Data.IORef
import           Data.Set
import           Data.Foldable          (find)

type State = (Set String)
type IORefState = IORef State

saveStringToState :: IO IORefState -> String -> IO String
saveStringToState stateIO string = do
  state <- stateIO
  atomicModifyIORef
    state
    (\oldStrings ->
       let updatedStrings = insert string oldStrings
       in (updatedStrings, updatedStrings))
  stringsState <- readIORef state :: IO State
  putStrLn ("### saved: " ++ show stringsState)
  return string

findStringInState :: IO IORefState -> String -> IO (Maybe String)
findStringInState …
Run Code Online (Sandbox Code Playgroud)

haskell shared-state ioref

2
推荐指数
1
解决办法
158
查看次数

Haskell并发使用简单的IORef?

我一直在问Haskell中关于并发性的几个问题,特别是TVar我对Livelock的问题有所顾虑TVar.

相反,我提出了这个解决方案.

(1)将程序中的所有共享数据包装在一个数据结构中,并将其包装在一个数据结构中IORef.(2)只需使用即可进行任何更改atomicModifyIORef.

我相信这可以防止死锁和活锁(而TVar只会阻止前者).此外,因为atomicModifyIORef简单地将另一个thunk链接到一个链(这是一对指针操作),这不是一个瓶颈.对数据的所有实际操作可以并行完成,只要它们不相互依赖.Haskell运行时系统将解决这个问题.

但是我觉得这太简单了.我错过了什么"陷阱"吗?

concurrency haskell shared-state ioref

1
推荐指数
2
解决办法
928
查看次数