在Python中异步修改局部变量

在Python中异步修改局部变量,python,Python,我有一个在不同线程中运行的函数,当引发一个事件时,它调用一个作为参数提供给它的函数,如下所示: import keyboard def func(arg): pass keyboard.on_press(func) 此(on_press)函数还将参数传递给(func) 在上面的示例中,我想将(pos)传递给(func),同时将参数(按时)传递给(func),但我不知道如何传递。 我不能多次打电话。 我的目标是(func)能够在异步引发事件时修改(pos) 任何帮助都将不胜感激。要在

我有一个在不同线程中运行的函数,当引发一个事件时,它调用一个作为参数提供给它的函数,如下所示:

import keyboard

def func(arg):
    pass

keyboard.on_press(func)
此(on_press)函数还将参数传递给(func)

在上面的示例中,我想将(pos)传递给(func),同时将参数(按时)传递给(func),但我不知道如何传递。 我不能多次打电话。 我的目标是(func)能够在异步引发事件时修改(pos)


任何帮助都将不胜感激。

要在线程之间共享值,只需在所有方法(全局变量或更好的类)中访问它们即可

导入键盘
pos=randint(10)
def func():
全球pos
...
def func2():
全球pos
...
def func3():
全球pos
...
def func4():
全球pos
...
def main():
全球pos
键盘上按(func)
尽管如此:
pos=func2()
检查=正确
检查时:
pos=func3(pos)
检查=功能4(位置)
main()
如果该值对竞争条件敏感(即,不同的按键可以产生不同的值,并且顺序在应用程序中非常关键),则必须引入互斥(锁)

来自线程导入锁
类MyClass(对象):
定义初始化(自):
self.mutex=Lock()
self.pos=randint(10)
def func():
使用self.mutex:
打印(self.pos)
...
def func2():
使用self.mutex:
打印(self.pos)
...
def func3():
使用self.mutex:
打印(self.pos)
...
def func4():
使用self.mutex:
打印(self.pos)
...
def main():
键盘上按(func)
尽管如此:
使用self.mutex:
self.pos=self.func2()
检查=正确
检查时:
使用self.mutex:
self.pos=self.func3()
check=self.func4()
如果名称=“\uuuuu main\uuuuuuuu”:
MyClass().main()

我不太明白你的问题所在。请尽量解释清楚。要在线程之间共享一个值,只需在所有方法(全局变量或更好的类)中访问它们即可。如果该值对竞争条件敏感(即,不同的按键可以产生不同的值,并且顺序在应用程序中很关键),则必须引入互斥锁(Lock)。我不想将该变量设置为全局变量,因为我在其他函数中有许多同名的变量(作为参数)我原以为这会把事情搞砸,但事实并非如此。谢谢你的回答。:-)
import keyboard


def func(arg):
    ...


def func2(a):
    ...


def func3(a):
    ...


def func4(a):
    ...


def main():
   keyboard.on_press(func)
   while True:
        pos = func2(randint(10))
        check = True
        while check:
            pos = func3(pos)
            check = func4(pos)

main()