擅长:python、mysql、java
<p>所以经过研究,我发现我必须创建一个新的asyncio循环,以非异步方法执行异步脚本。所以现在我的<code>whenMotion()</code>方法不再是<code>async</code>,而是使用<code>ensure_future()</code>执行一个。你知道吗</p>
<pre class="lang-py prettyprint-override"><code>import asyncio
from gpiozero import MotionSensor
class MotionSensorHandler():
__whenMotionCallback = None
def __init__(self, pin, whenMotionCallback):
# whenMotionCallback is an async function
self.__whenMotionCallback = whenMotionCallback
# Just init the sensor with gpiozero lib
motionSensor = MotionSensor(pin)
# Method to call when motion is detected
motionSensor.when_motion = self.whenMotion
def whenMotion(self):
# Create new asyncio loop
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
future = asyncio.ensure_future(self.__executeWhenMotionCallback()) # Execute async method
loop.run_until_complete(future)
loop.close()
async def __executeWhenMotionCallback(self):
await self.__whenMotionCallback()
</code></pre>