Python多线程异步任务队列
Oct 18, 2016 pm 01:35 PM
python
multithreading
beratur
很多场景为了不阻塞,都需要异步回调机制。这是一个简单的例子。
python的多线程异步常用到queue和threading模块
#!/usr/bin/env python # -*- coding: UTF-8 -*- import logging import queue import threading def func_a(a, b): return a + b def func_b(): pass def func_c(a, b, c): return a, b, c # 异步任务队列 _task_queue = queue.Queue() def async_call(function, callback, *args, **kwargs): _task_queue.put({ 'function': function, 'callback': callback, 'args': args, 'kwargs': kwargs }) def _task_queue_consumer(): """ 异步任务队列消费者 """ while True: try: task = _task_queue.get() function = task.get('function') callback = task.get('callback') args = task.get('args') kwargs = task.get('kwargs') try: if callback: callback(function(*args, **kwargs)) except Exception as ex: if callback: callback(ex) finally: _task_queue.task_done() except Exception as ex: logging.warning(ex) def handle_result(result): print(type(result), result) if __name__ == '__main__': t = threading.Thread(target=_task_queue_consumer) t.daemon = True t.start() async_call(func_a, handle_result, 1, 2) async_call(func_b, handle_result) async_call(func_c, handle_result, 1, 2, 3) async_call(func_c, handle_result, 1, 2, 3, 4) _task_queue.join()
Salin selepas log masuk
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 Panas
Repo: Cara menghidupkan semula rakan sepasukan
3 minggu yang lalu
By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
1 minggu yang lalu
By 尊渡假赌尊渡假赌尊渡假赌
Berapa lama masa yang diperlukan untuk mengalahkan fiksyen berpecah?
3 minggu yang lalu
By DDD
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
3 minggu yang lalu
By 尊渡假赌尊渡假赌尊渡假赌

Alat panas Tag

Artikel Panas
Repo: Cara menghidupkan semula rakan sepasukan
3 minggu yang lalu
By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
1 minggu yang lalu
By 尊渡假赌尊渡假赌尊渡假赌
Berapa lama masa yang diperlukan untuk mengalahkan fiksyen berpecah?
3 minggu yang lalu
By DDD
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
3 minggu yang lalu
By 尊渡假赌尊渡假赌尊渡假赌

Tag artikel 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

Google AI mengumumkan Gemini 1.5 Pro dan Gemma 2 untuk pembangun

Bagaimana untuk menangani sumber yang dikongsi dalam multi-threading dalam C++?

Bagaimana anda bertanya kepadanya Deepseek

Cabaran dan tindakan balas pengurusan memori C++ dalam persekitaran berbilang benang?

Cabaran dan strategi untuk menguji program berbilang benang dalam C++
