Rumah > pembangunan bahagian belakang > Tutorial Python > 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
Lepaskan: 2024-11-09 01:08:02
asal
297 orang telah melayarinya

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

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

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

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!

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