Я пытаюсь поделиться переменными экземпляра / объекта класса с другими процессами, которые я запускаю в нем, так как мне нужно запускать несколько функций одновременно, чтобы записывать макросы с клавиатуры и мыши и воспроизводить их позже в то же время.
Я вижу, что возможно использовать multiprocessing.Manager, но я использую concurrent.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()
Буду признателен за быстрое руководство, поскольку я в RU sh. Заранее спасибо
@ 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()