在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()