Rumah > pembangunan bahagian belakang > Tutorial Python > Bagaimana untuk Benar-benar Mencapai 'Fire and Forget' dengan Python's Async/Await?

Bagaimana untuk Benar-benar Mencapai 'Fire and Forget' dengan Python's Async/Await?

Patricia Arquette
Lepaskan: 2024-11-09 01:38:02
asal
948 orang telah melayarinya

How to Truly Achieve

"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()
Salin selepas log masuk

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())
Salin selepas log masuk

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
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan