Bagaimana untuk menggunakan modul async Python
Coroutine, juga dikenali sebagai benang mikro, ialah teknologi untuk penukaran konteks dalam mod pengguna. Ringkasnya, ia sebenarnya adalah urutan untuk melaksanakan blok kod untuk bertukar antara pelaksanaan
Sokongan Python untuk coroutine dilaksanakan melalui penjana.
Dalam penjana, kita bukan sahaja boleh melelaran melalui gelung for, tetapi juga terus memanggil fungsi next() untuk mendapatkan nilai seterusnya yang dikembalikan oleh pernyataan hasil. Hasil Python bukan sahaja boleh digunakan untuk mengembalikan nilai, tetapi juga boleh menerima parameter yang diluluskan oleh pemanggil.
1. Apakah itu penjana
Mekanisme yang dipanggil penjana dalam Python dikira semasa menggelung. Dengan memberikan algoritma dan kemudian mengira nilai sebenar semasa panggilan.
Apabila anda perlu mendapatkan nilai daripada penjana, anda boleh menggunakan next(), tetapi secara amnya gunakan gelung for untuk mendapatkannya.
penjana kaedah pelaksanaan penjana, gunakan () untuk mewakili
seperti: [1, 2, 3, 4, 5], kaedah penjana:
data = [1, 2, 3, 4, 5] (x * x for x in len(data))
definisi fungsi Dalam sesetengah senario dengan logik yang kompleks, ia tidak sesuai untuk menggunakan kaedah pertama, jadi terdapat cara untuk menentukan fungsi jenis, seperti:
def num(x): while (x < 10): print(x * x) x += 1 g = num(1) for item in g: print(item)
Apabila hasil muncul dalam fungsi, ia menjadi penjana
def num(x): while (x < 10): yield x * x # 返回结果,下次从这个地方继续? x += 1 g = num(1) # 返回的是generator对象 for item in g: print(item)
menjadi fungsi penjana, yang dilaksanakan setiap kali next() dipanggil. Ia kembali apabila menemui pernyataan hasil Apabila dilaksanakan semula, pelaksanaan diteruskan daripada pernyataan hasil yang dikembalikan pada kali terakhir.
2. Gunakan asyncio untuk melaksanakan io asynchronous
io asynchronous dilaksanakan melalui fungsi gelung acara dan coroutine
Gelung acara sentiasa memantau tugasan dalaman dan melaksanakannya jika wujud; tugas Dibahagikan kepada boleh laku dan laksanakan gelung acara menentukan tugasan pemprosesan Jika senarai tugasan kosong, acara ditamatkan.
import asyncio # 生成或获取事件循环对象loop;类比Java的Netty,我理解为开启一个selector loop = asyncio.get_event_loop() # 将协程函数(任务)提交到事件循环的任务列表中,协程函数执行完成之后终止。 # run_until_complete 会检查协程函数的运行状态,并执行协程函数 loop.run_until_complete( func() )
demo ujian
import asyncio import time async def test(): print("io等待") await asyncio.sleep(1) return 'hello' async def hello(): print("Hello world") r = await test() print("hello again") loop = asyncio.get_event_loop() tasks = [hello(), hello()] loop.run_until_complete(asyncio.wait(tasks)) loop.close()
Fungsi Coroutine: fungsi yang diubah suai oleh async def; berbanding dengan def biasa, seperti def func(), anda boleh The nilai yang dikembalikan oleh fungsi diterima secara langsung tetapi untuk fungsi coroutine, objek coroutine dikembalikan.
Untuk menjalankan fungsi coroutine, anda perlu menyerahkan objek ini ke gelung acara untuk diproses.
# 测试协程 import asyncio import time, datetime # 异步函数不同于普通函数,调用普通函数会得到返回值 # 而调用异步函数会得到一个协程对象。我们需要将协程对象放到一个事件循环中才能达到与其他协程对象协作的效果 # 因为事件循环会负责处理子程 序切换的操作。 async def Print(): return "hello" loop = asyncio.get_event_loop() loop.run_until_complete(Print)
menunggu:
Penggunaan: respons = menunggu + objek yang boleh ditunggu
Objek yang boleh ditunggu: objek coroutine, Masa Depan, Objek tugas boleh difahami Menunggu IO
tindak balas: Keputusan menunggu akan menggantung coroutine semasa (tugas) apabila menghadapi operasi IO Apabila coroutine semasa digantung, gelung acara boleh melaksanakan coroutine lain (tugasan). objek ialah objek coroutine, ia menjadi bersiri Jika ia adalah objek Tugas, objek Tugasan berjalan serentak boleh ditambah ke senarai gelung acara. Anda boleh menggunakan `asyncio.create_task()` untuk mencipta objek `Task` dan parameter yang diluluskan ialah objek coroutine
import asyncio import time, datetime async def display(num): pass tasks = [] for num in range(10): tasks.append(display(num)) # 生成任务列表 loop = asyncio.get_event_loop() loop.run_until_complete(asyncio.wait(tasks))
asnyc dan tunggu ialah sintaks baharu, versi lama ialah: @asyncio.coroutine dan hasil daripada
3. aiohttp
asyncio boleh melaksanakan operasi IO serentak berbenang tunggal. Jika ia hanya digunakan pada sisi pelanggan, ia tidak akan menjadi sangat berkuasa. Jika asyncio digunakan pada bahagian pelayan, seperti pelayan web, memandangkan sambungan HTTP adalah operasi IO, benang tunggal + coroutine boleh digunakan untuk mencapai sokongan serentak tinggi untuk berbilang pengguna.
aiohttp ialah rangka kerja HTTP berdasarkan asyncio.
Anda boleh menghantar mendapatkan permintaan seperti permintaan
Anda boleh menentukan parameter yang akan dihantar melalui parameter params
async def fetch(session): async with session.get("http://localhost:10056/test/") as response: data = json.loads(await response.text()) print(data["data"])
Permintaan pos
Laksanakan dua tugas secara tak segerak
Dalam permintaan rangkaian, permintaan ialah sesi dan aiohttp menggunakan ClientSession untuk mengurus sesi
Gunakan session.method untuk menghantar permintaan
Untuk respons maklumat respons, gunakan status untuk mendapatkan kod status respons, dan teks() untuk mendapatkan kandungan respons anda boleh menentukan format pengekodan dalam teks(). Sebelum menunggu keputusan respons, anda perlu menambah kata kunci await
Atas ialah kandungan terperinci Bagaimana untuk menggunakan modul async Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Anda boleh mempelajari konsep pengaturcaraan asas dan kemahiran Python dalam masa 2 jam. 1. Belajar Pembolehubah dan Jenis Data, 2.

Untuk membaca giliran dari Redis, anda perlu mendapatkan nama giliran, membaca unsur -unsur menggunakan arahan LPOP, dan memproses barisan kosong. Langkah-langkah khusus adalah seperti berikut: Dapatkan nama giliran: Namakannya dengan awalan "giliran:" seperti "giliran: my-queue". Gunakan arahan LPOP: Keluarkan elemen dari kepala barisan dan kembalikan nilainya, seperti LPOP Queue: My-Queue. Memproses Baris kosong: Jika barisan kosong, LPOP mengembalikan nihil, dan anda boleh menyemak sama ada barisan wujud sebelum membaca elemen.

Soalan: Bagaimana untuk melihat versi pelayan Redis? Gunakan alat perintah Redis-cli -version untuk melihat versi pelayan yang disambungkan. Gunakan arahan pelayan INFO untuk melihat versi dalaman pelayan dan perlu menghuraikan dan mengembalikan maklumat. Dalam persekitaran kluster, periksa konsistensi versi setiap nod dan boleh diperiksa secara automatik menggunakan skrip. Gunakan skrip untuk mengautomasikan versi tontonan, seperti menyambung dengan skrip Python dan maklumat versi percetakan.

Langkah -langkah untuk memulakan pelayan Redis termasuk: Pasang Redis mengikut sistem operasi. Mulakan perkhidmatan Redis melalui Redis-server (Linux/macOS) atau redis-server.exe (Windows). Gunakan redis-cli ping (linux/macOS) atau redis-cli.exe ping (windows) perintah untuk memeriksa status perkhidmatan. Gunakan klien Redis, seperti redis-cli, python, atau node.js untuk mengakses pelayan.

Tetapan saiz memori Redis perlu mempertimbangkan faktor -faktor berikut: Jumlah data dan trend pertumbuhan: Anggarkan saiz dan kadar pertumbuhan data yang disimpan. Jenis Data: Jenis yang berbeza (seperti senarai, hash) menduduki memori yang berbeza. Dasar caching: cache penuh, cache separa, dan dasar pemisahan mempengaruhi penggunaan memori. Puncak Perniagaan: Tinggalkan memori yang cukup untuk menangani puncak lalu lintas.

Redis Kegigihan akan mengambil ingatan tambahan, RDB sementara meningkatkan penggunaan memori apabila menjana snapshot, dan AOF terus mengambil ingatan apabila memasuki log. Faktor yang mempengaruhi termasuk jumlah data, dasar kegigihan dan konfigurasi REDIS. Untuk mengurangkan kesan, anda boleh mengkonfigurasi dasar snapshot RDB, mengoptimumkan konfigurasi AOF, menaik taraf perkakasan dan memantau penggunaan memori. Selain itu, adalah penting untuk mencari keseimbangan antara prestasi dan keselamatan data.

Python sesuai untuk sains data, pembangunan web dan tugas automasi, manakala C sesuai untuk pengaturcaraan sistem, pembangunan permainan dan sistem tertanam. Python terkenal dengan kesederhanaan dan ekosistem yang kuat, manakala C dikenali dengan keupayaan kawalan dan keupayaan kawalan yang mendasari.

** Parameter teras konfigurasi memori Redis adalah MaxMemory, yang menghadkan jumlah memori yang boleh digunakan oleh Redis. Apabila had ini melebihi, REDIS melaksanakan strategi penghapusan mengikut dasar-dasar MaxMemory, termasuk: noeviction (secara langsung menolak menulis), AllKeys-LRU/Volatile-LRU (dihapuskan oleh LRU), allkeys-rawak-rawak-rawak (dihapuskan oleh penghapusan rawak), dan volatili-volatili-ttl), dan volatili-volatili-ttl (tidak meniru-rawak), dan volatili-ttl (tidak meniminasi volatili), dan volatili-ttl (tidak meniminasi volatili), dan volatili-ttl (tidak meniru-rawak), dan volatili-ttl (eximination-ttl) Parameter lain yang berkaitan termasuk MaxMemory-Samples (kuantiti sampel LRU), RDB-Mampatan
