Rumah > Artikel > pembangunan bahagian belakang > Bagaimana untuk Melaksanakan Operasi Asynchronous "Fire and Forget" dalam Python Async/Await?
Dalam senario tertentu, terdapat keperluan untuk memulakan operasi tak segerak yang tidak memerlukan menunggu untuk selesai . Secara tradisinya, pendekatan "api dan lupakan" dalam coroutine Tornado boleh dicapai dengan meninggalkan kata kunci hasil.
Dalam sintaks async/menunggu Python 3.5, bagaimanapun, pelaksanaan sedemikian menimbulkan RuntimeWarning, menunjukkan bahawa coroutine tidak pernah dinantikan.
Nasib baik, pustaka asyncio Python menyediakan penyelesaian melalui kelas asyncio.Tasknya. Ini membolehkan penciptaan tugasan yang boleh dilaksanakan di latar belakang, tanpa menyekat pelaksanaan utama.
import asyncio 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() # continue with other actions if __name__ == '__main__': loop = asyncio.get_event_loop() loop.run_until_complete(main())
Pendekatan ini memastikan async_foo() dilaksanakan secara tak segerak manakala tindakan lain boleh diteruskan tanpa menunggu.
Adalah penting untuk ambil perhatian bahawa apabila gelung acara selesai, asyncio menjangkakan semua tugasan akan selesai. Oleh itu, apa-apa tugasan yang masih belum selesai boleh mengakibatkan amaran. Untuk mengelakkan ini, seseorang boleh sama ada menunggu semua tugas yang belum selesai atau membatalkannya.
Pilihan 1: Menunggu Tugasan Belum Selesai
pending = asyncio.Task.all_tasks() loop.run_until_complete(asyncio.gather(*pending))
Pilihan 2: Batal Menunggu Tugasan
pending = asyncio.Task.all_tasks() for task in pending: task.cancel() with suppress(asyncio.CancelledError): loop.run_until_complete(task)
Dengan membatalkan tugasan, tugasan itu dialih keluar daripada jadual gelung acara, menghalang sebarang kemungkinan amaran.
Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Operasi Asynchronous "Fire and Forget" dalam Python Async/Await?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!