"Fire and Forget" dengan Python's Async/Await
Dalam sintaks async/menunggu Python, melaksanakan fungsi tak segerak tanpa menunggu ia akan' t mencapai kesan "api dan lupa" yang diingini. Sebaliknya, program keluar dengan amaran masa jalan.
asyncio.Task untuk "Fire and Forget"
Untuk melaksanakan "fire and forget" dalam asyncio, gunakan asyncio. Tugas untuk mencipta tugasan yang melaksanakan operasi yang diingini di latar belakang. Dengan menggunakan asyncio.ensure_future(async_foo()), tugasan yang dikaitkan dengan async_foo() dimulakan dan tidak menunggu untuk selesai. Ini ialah pendekatan yang mudah tetapi berkesan untuk operasi tak segerak yang tidak perlu ditunggu secara eksplisit.
async def async_foo(): print("Async foo started") await asyncio.sleep(1) print("Async foo done") async def main(): asyncio.ensure_future(async_foo()) # Fire and forget async_foo()
Menyelesaikan Tugasan Belum Selesai
Perhatikan bahawa tugasan dibuat menggunakan asyncio. Tugasan dijangka selesai sebelum gelung acara selesai. Jika tugasan masih belum selesai, amaran akan dijana. Untuk mengelakkan perkara ini, tunggu dengan jelas semua tugas yang belum selesai sebaik sahaja gelung acara selesai.
async def main(): asyncio.ensure_future(async_foo()) # Fire and forget async_foo() loop = asyncio.get_event_loop() await asyncio.gather(*asyncio.Task.all_tasks())
Membatalkan Tugasan Daripada Menunggu
Sebagai alternatif, jika anda tidak mahu menunggu tugasan tertentu selama-lamanya, anda boleh membatalkannya:
async def echo_forever(): while True: print("Echo") await asyncio.sleep(1) async def main(): asyncio.ensure_future(echo_forever()) # Fire and forget echo_forever() loop = asyncio.get_event_loop() for task in asyncio.Task.all_tasks(): task.cancel() with suppress(asyncio.CancelledError): await task
Atas ialah kandungan terperinci Bagaimana untuk Benar-benar Mencapai 'Fire and Forget' dengan Python's Async/Await?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!