Heim Backend-Entwicklung Python-Tutorial Python-Multithread-Asynchron-Aufgabenwarteschlange

Python-Multithread-Asynchron-Aufgabenwarteschlange

Oct 18, 2016 pm 01:35 PM
python 多线程 队列

Viele Szenarien erfordern einen asynchronen Rückrufmechanismus, um nicht zu blockieren. Dies ist ein einfaches Beispiel.

Warteschlangen- und Threading-Module werden häufig in der asynchronen Multi-Thread-Implementierung von Python verwendet

#!/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()
Nach dem Login kopieren


Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße Artikel -Tags

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So laden Sie Deepseek Xiaomi herunter So laden Sie Deepseek Xiaomi herunter Feb 19, 2025 pm 05:27 PM

So laden Sie Deepseek Xiaomi herunter

Google AI kündigt Gemini 1.5 Pro und Gemma 2 für Entwickler an Google AI kündigt Gemini 1.5 Pro und Gemma 2 für Entwickler an Jul 01, 2024 am 07:22 AM

Google AI kündigt Gemini 1.5 Pro und Gemma 2 für Entwickler an

Wie gehe ich mit gemeinsam genutzten Ressourcen beim Multithreading in C++ um? Wie gehe ich mit gemeinsam genutzten Ressourcen beim Multithreading in C++ um? Jun 03, 2024 am 10:28 AM

Wie gehe ich mit gemeinsam genutzten Ressourcen beim Multithreading in C++ um?

Wie fragst du ihn Deepseek? Wie fragst du ihn Deepseek? Feb 19, 2025 pm 04:42 PM

Wie fragst du ihn Deepseek?

So suchen Sie Deepseek So suchen Sie Deepseek Feb 19, 2025 pm 05:18 PM

So suchen Sie Deepseek

Herausforderungen und Gegenmaßnahmen der C++-Speicherverwaltung in Multithread-Umgebungen? Herausforderungen und Gegenmaßnahmen der C++-Speicherverwaltung in Multithread-Umgebungen? Jun 05, 2024 pm 01:08 PM

Herausforderungen und Gegenmaßnahmen der C++-Speicherverwaltung in Multithread-Umgebungen?

Herausforderungen und Strategien zum Testen von Multithread-Programmen in C++ Herausforderungen und Strategien zum Testen von Multithread-Programmen in C++ May 31, 2024 pm 06:34 PM

Herausforderungen und Strategien zum Testen von Multithread-Programmen in C++

So programmieren Sie Deepseek So programmieren Sie Deepseek Feb 19, 2025 pm 05:36 PM

So programmieren Sie Deepseek

See all articles