Python多处理共享变量



我正试图与我在其中启动的其他进程共享类实例/对象变量,因为我需要同时运行多个函数,以便从键盘和;鼠标,然后在同一时间重新播放它们。

我发现使用多处理是可能的。经理,但我使用的是concurrent.futures.ThreadPoolExecutitor。那里有类似的功能吗?

我现在写了下面的代码来澄清。实际的代码有一个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()

既然我赶时间,我希望能给你一个快速的指示。提前感谢

@user2357112支持Monica以下是我用来测试计时的代码,以验证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()

如果您想在每个进程都可以使用的变量中保存一些东西,您可以使用队列。

  1. 导入队列
import queue
  1. 创建共享变量
shared_var = queue.Queue(maxsize=0)

其中maxsize是可以保存在此队列中的最大值

  1. 在任何进程中编辑共享变量
shared_var.put(item)
  1. 获取变量中的内容
variable = shared_var.get()

您可以对队列执行更多操作,请参阅文档。

相关内容

  • 没有找到相关文章

最新更新