uasyncio-paralel(多)线程似乎不起作用



我试图连续使用两个我想在同一时间执行的例程,但只有第一个在运行。。。

我哪里错了?

async def screen(self): #first routine
Writer.set_textpos(ssd, 0, 0)  # In case previous tests have altered it
wri = Writer(ssd, small, verbose=False)
wri.set_clip(False, False, False)
...
refresh(ssd)
utime.sleep_ms(200)

async def InvPress(self):  #second routine
utime.sleep_ms(1000)
print('Sw2',self.SW2.value())
while True:
print(self.SW2.value())
if self.SW2.value():
if self.PressPos == 1:
self.stepper.steps(-1600,2600)
self.PressPos = not self.PressPos
else :
self.stepper.steps(+1600,2600)
self.PressPos = not self.PressPos
utime.sleep_ms(120)

async def main(self): #this don't work in parallel (only the first routine is running)
uasyncio.create_task(self.InvPress())
uasyncio.create_task(self.screen())       
await uasyncio.sleep(10)

(免责声明:不了解microython(

异步程序是基于所谓的协作调度的。推论/任务只能在特定点进行切换。这些点就是代码中的await

如果一个协程中没有await,则不可能切换任务,即没有其他协程可以运行。这就是InvPress的情况。(其他协同程序未完全列出(

与此密切相关的是一条规则,即异步程序中的定期睡眠是一个错误。它除了睡眠之外什么都不做,并阻止其他协同程序在那段时间运行。在这样的睡眠中,程序只是死了(没有反应(。如果需要延迟,则始终await正确的异步睡眠例程。

最新更新