Python多处理共享变量

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

我试图与我在其中启动的其他进程共享类实例/对象变量,因为我需要同时运行多个功能,以便从键盘和鼠标录制宏并在后面重新播放它们相同的时间。

我看到可以使用multiprocessing.Manager,但是我正在使用current.futures.ThreadPoolExecutor。有类似的功能吗?

我现在在下面编写了代码以进行澄清。实际的代码具有setState函数,用于设置记录状态等,并且所按的键不会传递。同样,实际的代码显然具有监听按键和鼠标移动的功能,getKey和getMove函数应该是附加到列表的函数。这种情况下的问题是,一旦按下“插入”键,就无法从第二个应开始记录的进程访问记录变量。并发函数类似于多处理中的Manager可以解决该问题,但是我不确定该调用什么或使用它。

from concurrent.futures import ThreadPoolExecutor as Executor
import time

class recMacros(object):
    def __init__(self):
        self.recording = False

        self.lastKey = None
        self.lastMove = None

        self.mouseMoves = []
        self.keyPresses = []

        self.runMacros()


    def getTime(self):
        return time.time()

    def getKey(self):
        #return keyboard listener last key pressed
        return "W"

    def getMove(self):
        #return keyboard listener last key pressed
        return "W"

    def recMoves(self): 
        while True:
            while self.recording:
                mouseMove = self.getMove()
                if mouseMove != self.lastMove:
                    self.mouseMoves.append((mouseMove, self.getTime()))
                    self.lastMove = mouseMove

    def recPresses(self):
         while True:
             keyPress = self.getKey()
             if keyPress == "Insert":
                self.recording = True
             elif keyPress == "End":
                self.recording = False
             elif self.recording and keyPress != self.lastKey:
                self.keyPresses.append((keyPress, self.getTime()))
                self.lastKey = keyPress
             else:
                 print("Error")

    def recMacros(self):
        with Executor(max_workers=2) as e:
            e.submit(recPresses)
            e.submit(recMoves)

if __name__ == "__main__":
     recMacros()

由于我急忙,我希望能得到一些快速的指导。在此先感谢

这是我用来测试时间的代码,用于验证ThreadPoolExecutor是否像并行运行这些功能的过程:

from concurrent.futures import ThreadPoolExecutor
import time

def printTime():
    print(f"Time: {time.time()}\n")


def runPro():
    with ThreadPoolExecutor(max_workers=3) as e:
        for i in range(3):
            e.submit(printTime)


runPro()
python parallel-processing macros multiprocessing concurrent.futures
1个回答
-1
投票
如果要在每个进程可以使用的变量中保存某些内容,则可以使用queue

    导入queue
  • import queue
      创建共享变量
  • shared_var = queue.Queue(maxsize=0)
    其中maxsize是此队列中可以保存的最大值

      在任何过程中编辑共享变量
  • shared_var.put(item)
      获取变量中的内容
  • variable = shared_var.get()
    queue可以做很多事情,请参见documentation。>>
  • © www.soinside.com 2019 - 2024. All rights reserved.