[剪断。删除了非异步版本]
要使用异步,您将使用 trio。我向所有询问异步 python 的人推荐 trio。使用特别是套接字要容易得多。使用套接字,我有一个具有 1 个读取和 1 个写入功能的托儿所,写入功能从读取功能放置的双端队列写入数据;并等待发送。下面的应用程序通过使用trio.run(function,parameters)
然后打开一个托儿所来工作,在托儿所中,程序在循环中运行,await trio.sleep(60)
每个循环之间都有一个循环,让应用程序的其余部分有机会运行。这将在单个进程中运行程序,但您的机器可以处理 1500 个 TCP 连接,而使用非异步方法只能处理 255 个。
我还没有掌握取消语句,但我说move_on_after(70)
这意味着代码将等待 10 秒,而不是执行 60 秒的睡眠,然后再进入下一个循环。
import trio
async def execTimer():
'''This function gets executed in a nursery simultaneously with the rest of the program'''
while True:
trio.move_on_after(70):
await trio.sleep(60)
print('60 Second Loop')
async def OneTime_OneMinute():
'''This functions gets run by trio.run to start the entire program'''
with trio.open_nursery() as nursery:
nursery.start_soon(execTimer)
nursery.start_soon(print,'do the rest of the program simultaneously')
def start():
'''You many have only one trio.run in the entire application'''
trio.run(OneTime_OneMinute)
if __name__ == '__main__':
start()
这将在托儿所中同时运行任意数量的功能。您可以将任何可取消语句用于程序其余部分继续运行的检查点。所有 trio 语句都是检查点,所以经常使用它们。我没有测试这个应用程序;所以如果有任何问题就问吧。如您所见,三重奏是易于使用的功能的冠军。它基于使用函数而不是对象,但您可以根据需要使用对象。阅读更多:[1]:https ://trio.readthedocs.io/en/stable/reference-core.html