Python 我不知道';我不知道如何修复以下错误;RuntimeError:线程';中没有当前事件循环;螺纹-1';和';螺纹-2';
我是一名编码初学者,这是我第一次使用线程。线程是我能为我的项目找到的唯一解决方案。在这个项目中,我应该在应用程序上显示哪个传感器在振动,为此我画了4个圆圈来代表传感器。因此,传感器1将是bytearray(b'\x03'),传感器2将是bytearray(b'\x04'),依此类推。我想要的是,当特征值为bytearray(b'\x03')时,传感器1的颜色发生变化 目前正在使用python 3.9创建一个通过蓝牙与arduino nano 33 iot连接的应用程序,我希望能够每0.3秒读取一次该特性,并根据该特性的值更改画布图形的颜色。我的意图是让while循环在后台运行,每.3秒读取一次特征值。在我的主屏幕上,基于读取的值,例如,如果它读取bytearray(b'\x03'),它应该更改屏幕上一个图形的颜色。(这就是if语句的原因,因此更改颜色的条件将替换“print”(“changed color”))。此外,将有多个传感器通过bytearray(b'\x03')通过bytearray(b'\x10')进行检查,因此我不知道是否最好使用if语句,因此如果您有更好的建议,请告诉我Python 我不知道';我不知道如何修复以下错误;RuntimeError:线程';中没有当前事件循环;螺纹-1';和';螺纹-2';,python,multithreading,kivy,Python,Multithreading,Kivy,我是一名编码初学者,这是我第一次使用线程。线程是我能为我的项目找到的唯一解决方案。在这个项目中,我应该在应用程序上显示哪个传感器在振动,为此我画了4个圆圈来代表传感器。因此,传感器1将是bytearray(b'\x03'),传感器2将是bytearray(b'\x04'),依此类推。我想要的是,当特征值为bytearray(b'\x03')时,传感器1的颜色发生变化 目前正在使用python 3.9创建一个通过蓝牙与arduino nano 33 iot连接的应用程序,我希望能够每0.3秒读取一
def background():
async def run(address):
async with BleakClient(address, loop=loop) as client:
await client.get_services()
while True:
value = await client.read_gatt_char(r_characteristic)
if await client.read_gatt_char(r_characteristic):
time.sleep(.3)
print("Read Value: {0}".format(value))
loop = asyncio.get_event_loop()
def foreground():
async def run(address):
async with BleakClient(address, loop=loop) as client:
await client.get_services()
value = await client.read_gatt_char(r_characteristic)
if await client.read_gatt_char(r_characteristic) == bytearray(b'\x03'):
print("changed color")
loop = asyncio.get_event_loop()
asyncio.ensure_future(run(address))
loop.run_forever()
b = threading.Thread(target=background)
f = threading.Thread(target=foreground)
b.start()
f.start()
但是,当我运行它时,它会返回一个错误,如下所示
raise RuntimeError('There is no current event loop in thread %r.'
raise RuntimeError('There is no current event loop in thread %r.' raise RuntimeError('There is no current event loop in thread %r.'
RuntimeError: There is no current event loop in thread 'Thread-1'.
RuntimeError: There is no current event loop in thread 'Thread-2'.
任何帮助都将不胜感激 尝试在代码末尾添加这两行:
b.join()
f.join()
可能行得通,也可能行不通,但正如Tim Roberts正确地说的那样,将线程和异步结合起来是非常不寻常的,您可能需要重构代码。将线程和异步结合起来有些不寻常。你确定这是正确的方法吗?您的后台线程中不会运行任何内容,因为您从未调用
run()
。感谢您的帮助,但由于我需要先通过蓝牙连接到arduino,以便while循环可以读取特征值,所以我最好的方法是使用async。您建议我如何编写while循环来连接和填充后台的值?我基本上希望使用这些值来更改我拥有的kv文件上的画布颜色。那么,对我来说,执行while循环的最佳方法是什么?因为我使用async的原因是读取应用程序通过蓝牙连接的arduino nano 33物联网的特征值。因此,从技术上讲,while循环必须连接到arduino。我真的不知道该怎么办。你到底试过b.join和f.join吗?