Pustaka isyarat kuat Python: blinker
1. Isyarat
Helo semua, saya sepupu saya~
Isyarat ialah cara pemberitahuan atau komunikasi pihak dan penerima. Pengirim menghantar isyarat, dan proses penerima yang menerima isyarat akan melompat ke dalam fungsi pemprosesan isyarat Selepas pelaksanaan, ia akan melompat kembali ke kedudukan asal untuk meneruskan pelaksanaan.
Isyarat biasa dalam Linux, input Ctrl+C melalui papan kekunci, adalah untuk menghantar isyarat kepada sistem untuk memberitahu sistem untuk keluar dari proses semasa.
Ciri isyarat ialah pengirim memberitahu pelanggan tentang apa yang berlaku. Menggunakan isyarat terbahagi kepada 3 langkah: mentakrifkan isyarat, memantau isyarat dan menghantar isyarat.
Modul komunikasi yang menyediakan konsep isyarat dalam Python adalah berkelip.
Blinker ialah pustaka isyarat berkuasa berdasarkan Python, yang menyokong komunikasi titik-ke-titik yang mudah dan multicast titik-ke-berbilang. Mekanisme isyarat flask adalah berdasarkannya. Walaupun kernel Blinker kecil, ia sangat berkuasa Ia menyokong ciri berikut:
- Menyokong pendaftaran isyarat bernama global
- Menyokong isyarat tanpa nama
- Menyokong tersuai. penamaan Isyarat
- Menyokong sambungan berterusan dan jangka pendek dengan penerima
- Secara automatik memutuskan sambungan daripada penerima melalui rujukan yang lemah
- Menyokong penghantaran sebarang saiz Data
- menyokong mengumpul nilai pulangan penerima isyarat
- Keselamatan benang
2. Blinker menggunakan
kaedah pemasangan:
pip install blinker
2.1 Isyarat bernama
from blinker import signal # 定义一个信号 s = signal('king') def animal(args): print('我是小钻风,大王回来了,我要去巡山') # 信号注册一个接收者 s.connect(animal) if "__main__" == __name__: # 发送信号 s.send()
2.2 Isyarat Anonymous
blinker juga menyokong isyarat tanpa nama, iaitu, tidak perlu menentukan nilai isyarat tertentu. Setiap isyarat tanpa nama yang dibuat adalah bebas antara satu sama lain.
from blinker import Signal s = Signal() def animal(sender): print('我是小钻风,大王回来了,我要去巡山') s.connect(animal) if "__main__" == __name__: s.send()
2.3 Isyarat berbilang hantaran
Isyarat berbilang hantaran ialah ciri yang boleh mencerminkan dengan lebih baik kelebihan isyarat. Berbilang penerima didaftarkan kepada isyarat, dan penghantar hanya perlu menghantar sekali untuk menyampaikan maklumat kepada berbilang penerima.
from blinker import signal s = signal('king') def animal_one(args): print(f'我是小钻风,今天的口号是: {args}') def animal_two(args): print(f'我是大钻风,今天的口号是: {args}') s.connect(animal_one) s.connect(animal_two) if "__main__" == __name__: s.send('大王叫我来巡山,抓个和尚做晚餐!')
2.4 Penerima melanggan topik
Penerima menyokong melanggan topik yang ditentukan, dan hanya apabila topik yang ditentukan menghantar mesej, ia akan dihantar kepada penerima. Kaedah ini membezakan topik yang berbeza dengan baik.
from blinker import signal s = signal('king') def animal(args): print(f'我是小钻风,{args} 是我大哥') s.connect(animal, sender='大象') if "__main__" == __name__: for i in ['狮子', '大象', '大鹏']: s.send(i)
2.5 Penggunaan Penghias
Selain pendaftaran fungsi, terdapat kaedah pendaftaran isyarat yang lebih mudah, iaitu penghias.
from blinker import signal s = signal('king') @s.connect def animal_one(args): print(f'我是小钻风,今天的口号是: {args}') @s.connect def animal_two(args): print(f'我是大钻风,今天的口号是: {args}') if "__main__" == __name__: s.send('大王叫我来巡山,抓个和尚做晚餐!')
2.6 Penghias yang boleh melanggan topik
Kaedah pendaftaran Connect mempunyai kelemahan apabila menggunakan penghias, iaitu ia tidak boleh melanggan topik, jadi terdapat kaedah connect_via yang lebih maju yang menyokong melanggan kepada topik.
from blinker import signal s = signal('king') @s.connect_via('大象') def animal(args): print(f'我是小钻风,{args} 是我大哥') if "__main__" == __name__: for i in ['狮子', '大象', '大鹏']: s.send(i)
2.7 Semak sama ada isyarat mempunyai penerima
Jika mengambil masa yang lama untuk menyediakan pengirim menghantar mesej, untuk mengelakkan pembaziran prestasi kerana tiada penerima, anda boleh Pertama Periksa sama ada terdapat penerima untuk isyarat tertentu, dan hanya hantar apabila ia disahkan bahawa terdapat penerima, supaya tepat.
from blinker import signal s = signal('king') q = signal('queue') def animal(sender): print('我是小钻风,大王回来了,我要去巡山') s.connect(animal) if "__main__" == __name__: res = s.receivers print(res) if res: s.send() res = q.receivers print(res) if res: q.send() else: print("孩儿们都出去巡山了")
{4511880240: <weakref at 0x10d02ae80; to 'function' at 0x10cedd430 (animal)>} 我是小钻风,大王回来了,我要去巡山 {} 孩儿们都出去巡山了
2.8 Semak sama ada pelanggan melanggan isyarat tertentu
Anda juga boleh menyemak sama ada pelanggan melanggan isyarat tertentu
from blinker import signal s = signal('king') q = signal('queue') def animal(sender): print('我是小钻风,大王回来了,我要去巡山') s.connect(animal) if "__main__" == __name__: res = s.has_receivers_for(animal) print(res) res = q.has_receivers_for(animal) print(res)
True False
3 blinker
Flask menyepadukan blinker sebagai penyelesaian untuk aplikasi decoupled. Dalam Flask, senario penggunaan isyarat adalah seperti berikut: sebelum permintaan tiba dan selepas permintaan tamat. Pada masa yang sama, Flask juga menyokong isyarat tersuai.
Demo 3.1 Simple Flask
from flask import Flask app = Flask(__name__) @app.route('/',methods=['GET','POST'],endpoint='index') def index(): return 'hello blinker' if __name__ == '__main__': app.run()
Apabila mengakses 127.0.0.1:5000, kembalikan kejap hello kepada penyemak imbas.
3.2 Isyarat tersuai
Oleh kerana Flask menyepadukan isyarat, ia diimport daripada Flask apabila menggunakan isyarat dalam Flask.
from flask import Flask from flask.signals import _signals app = Flask(__name__) s = _signals.singal('msg') def QQ(args): print('you have msg from QQ') s.connect(QQ) @app.route('/',methods=['GET','POST'],endpoint='index') def index(): s.send() return 'hello blinker' if __name__ == '__main__': app.run()
3.3 Isyarat Flask sendiri
Selain memperibadikan isyarat, anda juga boleh menggunakan isyarat terbina dalam dalam Flask. Terdapat banyak jenis isyarat yang disertakan dengan Flask, seperti berikut:
请求 request_started = _signals.signal('request-started')# 请求到来前执行 request_finished = _signals.signal('request-finished')# 请求结束后执行 模板渲染 before_render_template = _signals.signal('before-render-template')# 模板渲染前执行 template_rendered = _signals.signal('template-rendered')# 模板渲染后执行 请求执行 got_request_exception = _signals.signal('got-request-exception')# 请求执行出现异常时执行 request_tearing_down = _signals.signal('request-tearing-down')# 请求执行完毕后自动执行(无论成功与否) appcontext_tearing_down = _signals.signal('appcontext-tearing-down') # 请求上下文执行完毕后自动执行(无论成功与否) 请求上下文中 appcontext_pushed = _signals.signal('appcontext-pushed')# 请求上下文push时执行 appcontext_popped = _signals.signal('appcontext-popped')# 请求上下文pop时执行 message_flashed = _signals.signal('message-flashed')# 调用flask在其中添加数据时,自动触发
Berikut ialah contoh cara menggunakan isyarat dalam Flask sebelum permintaan tiba
from flask import Flask from flask.signals import _signals, request_started import time app = Flask(__name__) def wechat(args): print('you have msg from wechat') # 从flask中引入已经定好的信号,注册一个函数 request_started.connect(wechat) @app.route('/',methods=['GET','POST'],endpoint='index') def index(): return 'hello blinker' if __name__ == '__main__': app.run()
Apabila permintaan datang, Flask akan melalui request_started Memberitahu penerima ialah fungsi wechat Pada masa ini, fungsi wechat dilaksanakan dahulu dan kemudian mengembalikan hasilnya kepada penyemak imbas.
Tetapi kaedah penggunaan ini tidak begitu sahih, kerana isyarat tidak menyokong kaedah tak segerak, jadi biasanya penerima isyarat dalam persekitaran pengeluaran adalah rangka kerja yang dikonfigurasikan untuk pelaksanaan tak segerak, seperti saderi rangka kerja tak segerak yang terkenal dalam Python.
4. Ringkasan kelebihan isyarat
:
- Aplikasi yang dipisahkan: menguraikan aplikasi berganding yang dijalankan secara bersiri ke dalam pelaksanaan berbilang peringkat
- Terbitkan Pelanggan: Kurangkan penggunaan pemanggil, maklumkan berbilang pelanggan dengan satu panggilan
Kelemahan isyarat:
- Tidak menyokong tak segerak
- Menyokong langganan Tema ini keupayaan adalah terhad
Setiap suka, tontonan, komen dan tweet semula anda adalah sangat penting bagi saya, terima kasih atas sokongan anda.
Baiklah, jumpa lagi lain kali Saya suka kucing, teknologi, dan sepupu lama Sisi lebih lagi⁽⁽ଘ( ˙꒳˙ )ଓ⁾⁾
Atas ialah kandungan terperinci Pustaka isyarat kuat Python: blinker. 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

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

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

PHP terutamanya pengaturcaraan prosedur, tetapi juga menyokong pengaturcaraan berorientasikan objek (OOP); Python menyokong pelbagai paradigma, termasuk pengaturcaraan OOP, fungsional dan prosedur. PHP sesuai untuk pembangunan web, dan Python sesuai untuk pelbagai aplikasi seperti analisis data dan pembelajaran mesin.

PHP sesuai untuk pembangunan web dan prototaip pesat, dan Python sesuai untuk sains data dan pembelajaran mesin. 1.Php digunakan untuk pembangunan web dinamik, dengan sintaks mudah dan sesuai untuk pembangunan pesat. 2. Python mempunyai sintaks ringkas, sesuai untuk pelbagai bidang, dan mempunyai ekosistem perpustakaan yang kuat.

Python lebih sesuai untuk pemula, dengan lengkung pembelajaran yang lancar dan sintaks ringkas; JavaScript sesuai untuk pembangunan front-end, dengan lengkung pembelajaran yang curam dan sintaks yang fleksibel. 1. Sintaks Python adalah intuitif dan sesuai untuk sains data dan pembangunan back-end. 2. JavaScript adalah fleksibel dan digunakan secara meluas dalam pengaturcaraan depan dan pelayan.

Sambungan kod VS menimbulkan risiko yang berniat jahat, seperti menyembunyikan kod jahat, mengeksploitasi kelemahan, dan melancap sebagai sambungan yang sah. Kaedah untuk mengenal pasti sambungan yang berniat jahat termasuk: memeriksa penerbit, membaca komen, memeriksa kod, dan memasang dengan berhati -hati. Langkah -langkah keselamatan juga termasuk: kesedaran keselamatan, tabiat yang baik, kemas kini tetap dan perisian antivirus.

Kod VS boleh digunakan untuk menulis Python dan menyediakan banyak ciri yang menjadikannya alat yang ideal untuk membangunkan aplikasi python. Ia membolehkan pengguna untuk: memasang sambungan python untuk mendapatkan fungsi seperti penyempurnaan kod, penonjolan sintaks, dan debugging. Gunakan debugger untuk mengesan kod langkah demi langkah, cari dan selesaikan kesilapan. Mengintegrasikan Git untuk Kawalan Versi. Gunakan alat pemformatan kod untuk mengekalkan konsistensi kod. Gunakan alat linting untuk melihat masalah yang berpotensi lebih awal.

Kod VS boleh dijalankan pada Windows 8, tetapi pengalaman mungkin tidak hebat. Mula -mula pastikan sistem telah dikemas kini ke patch terkini, kemudian muat turun pakej pemasangan kod VS yang sepadan dengan seni bina sistem dan pasangnya seperti yang diminta. Selepas pemasangan, sedar bahawa beberapa sambungan mungkin tidak sesuai dengan Windows 8 dan perlu mencari sambungan alternatif atau menggunakan sistem Windows yang lebih baru dalam mesin maya. Pasang sambungan yang diperlukan untuk memeriksa sama ada ia berfungsi dengan betul. Walaupun kod VS boleh dilaksanakan pada Windows 8, disyorkan untuk menaik taraf ke sistem Windows yang lebih baru untuk pengalaman dan keselamatan pembangunan yang lebih baik.

Dalam kod VS, anda boleh menjalankan program di terminal melalui langkah -langkah berikut: Sediakan kod dan buka terminal bersepadu untuk memastikan bahawa direktori kod selaras dengan direktori kerja terminal. Pilih arahan Run mengikut bahasa pengaturcaraan (seperti python python your_file_name.py) untuk memeriksa sama ada ia berjalan dengan jayanya dan menyelesaikan kesilapan. Gunakan debugger untuk meningkatkan kecekapan debug.

PHP berasal pada tahun 1994 dan dibangunkan oleh Rasmuslerdorf. Ia pada asalnya digunakan untuk mengesan pelawat laman web dan secara beransur-ansur berkembang menjadi bahasa skrip sisi pelayan dan digunakan secara meluas dalam pembangunan web. Python telah dibangunkan oleh Guidovan Rossum pada akhir 1980 -an dan pertama kali dikeluarkan pada tahun 1991. Ia menekankan kebolehbacaan dan kesederhanaan kod, dan sesuai untuk pengkomputeran saintifik, analisis data dan bidang lain.
