我有一个很大的问题,试图以它应该是的方式来运作.
我有一个store
函数,它应该模拟对数据库的写入.现在我写的是一个文本文件.为此,我有一个用于引入延迟的布尔值.
import asyncio
import os
import time
async def store(text, delay: bool = False):
mode = "a" if os.path.exists(DB_FILE) else "w"
if delay:
await asyncio.sleep(5)
with open(DB_FILE, mode=mode) as f:
timestamp = str(time.time())
row = f"{text}\t{timestamp}\n"
f.write(row)
f.flush()
print("done saving")
然后,我有一个函数来模拟向该数据库写入几个更改,然后获取最新的更改.如果上一个存储函数中有延迟,则不会被算作"最新".
texts = [("how", False), ("are", False), ("you", True)]
async def run_tests():
initial_text = "hi"
await store(initial_text)
curr_text = initial_text
last_finished = initial_text
for text, delay in texts:
await store(text, delay=delay)
if not delay: # if finished
last_finished = curr_text
assert last_finished == "are"
if __name__ == "__main__":
asyncio.run(run_tests())
我试着用asyncio.run()
和loop.run_until_complete()
运行这个程序,但都不起作用.asyncio.sleep
的行为仍然像time.sleep
.
理想情况下,我想要这条线.
await store(text, delay=delay)
以在功能run_tests
的其余部分继续运行的同时异步执行.
我做错了什么?