Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Melaksanakan Operasi Asynchronous "Fire and Forget" dalam Python Async/Await?

Bagaimana untuk Melaksanakan Operasi Asynchronous "Fire and Forget" dalam Python Async/Await?

Barbara Streisand
Barbara Streisandasal
2024-11-09 01:08:02214semak imbas

How to Implement

"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.

Asyncio.Task: The Solution

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.

Mengendalikan Tugasan Belum Selesai

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn