首页 > 系统相关 >线程池 + 回调 (进程赤用法类似)

线程池 + 回调 (进程赤用法类似)

时间:2024-06-04 17:35:34浏览次数:15  
标签:__ exception thread args worker 用法 线程 kwargs 回调

import os
import threading
import time
from concurrent.futures import ThreadPoolExecutor
from functools import wraps

ThreadPool = ThreadPoolExecutor(max_workers=10)


def thread_executor(a):
    print("I am slave. I am working. I am going to sleep 3s")
    time.sleep(3)
    # raise "1111"
    # a = 1 + "a"
    print("Exit thread executor", a)
    return 111


def thread_task(func, *args, **kwargs):
    def worker_wrap(fn):
        @wraps(fn)
        def wrapper(*args_, **kwargs_):
            print(
                f"worker wrap. thread id: {threading.get_ident()}, "
                f"function: {fn.__name__}, args: {args_}, kwargs: {kwargs_}"
            )
            fn(*args_, **kwargs_)

        return wrapper

    def thread_callback(worker):
        worker_exception = worker.exception()
        if worker_exception:
            print(
                f"thread execute exception, thread id: {threading.currentThread().ident}, exception: {worker_exception}"
            )
        else:
            print(
                f"thread execute success. thread id: {threading.currentThread().ident}"
            )

    feature = ThreadPool.submit(worker_wrap(func), *args, **kwargs)
    feature.add_done_callback(thread_callback)
    return feature


if __name__ == "__main__":
    thread_task(thread_executor, {"a": 1, "b": 2})

标签:__,exception,thread,args,worker,用法,线程,kwargs,回调
From: https://www.cnblogs.com/yimeimanong/p/18231334

相关文章

  • Netty线程模型
    在Netty编程模型入门案例中客户端和服务端通信底层如何实现的呢?先看客户端和服务端的类图:两类图大致一样,区别在于ServerBootstrap与EventLoopGroup是组合关系,而Bootstrap与EventLoopGroup之间没有直接的关系。实际在......
  • 命令行压缩工具用法
    tar归档#创建一个未压缩的tar归档文件#其中,`-c`表示创建归档文件,`-v`表示显示详细信息,`-f`表示指定归档文件名。tar-cvfarchive.tarfile1file2dir1#创建一个使用gzip压缩的tar归档文件#其中,`-z`表示使用gzip压缩。tar-czvfarchive.tar.gzfile1fi......
  • Java中的键盘输入类Scanner包的用法
    在Java中,Scanner类是java.util包下的一个实用类,它提供了一种方便的方法来解析从各种输入源(如文件、字符串或控制台)读取的原始数据。Scanner类使用了正则表达式来解析输入的数据,因此它非常强大且灵活。以下是一些使用Scanner类的常见场景和示例:1.从控制台读取输入impo......
  • java 线程池 Executors原生三大方法
    packagecom.chen.pool;importjava.util.concurrent.ExecutorService;importjava.util.concurrent.Executors;publicclassTest1{publicstaticvoidmain(String[]args){//平时我们创建一些类使用工具类操作s//总数可以管理//线程池Executors原生三大方法......
  • OPEN_CV多线程线程池管理
    两种自旋锁的设置操作系统级别自旋锁的设置,例如在C++11及以后的版本中,自带线程管理库,可以定义为:defineCV_YIELD()std::this_thread::yield(),此时进入CV_YIELD(),线程释放CPU,线程被阻塞,等待被唤醒.CPU级别的自旋锁的设置,与使用的CPU架构有关,以X86为例,X86......
  • Java 多线程的创建
    Java多线程的创建Java元的JVM允许程序运行多个线程,使用java.lang.Thread类代表线程,所有的线程对象都必须是Thread类或其子类线程的创建方式有两种,一者为继承Thread类,一者为实现Runnable接口实现方式之一:继承Thread类实现步骤Java通过继承Thread类来创建并启动多线程......
  • C++的std::optional的用法
    C++的std::optional的用法在编程中,处理可能为空的变量或结果是一个常见的挑战。确实,传统的几种方法都有其局限性,可能导致代码的可读性和可维护性降低。如下的方式:使用特殊值标记:虽然使用特殊值(如-1、INFINITY、nullptr等)来标记无效或缺失的值很常见,但这种方法有其缺点。......
  • 云渲染农场什么是线程模式?
    ​许多设计师在选择云渲染农场时,常常会遇到48线程、56线程、72线程等选项,然而,不少新手在面对这些选择时,往往无法直观地感受到不同线程数量之间的差异。接下来,我们将共同探讨线程的作用和影响,帮助大家更好地理解这些选择。一、CPU线程的意思CPU线程是计算机处理器的基本工作单元......
  • 面试官:说一说如何优雅的关闭线程池,我:shutdownNow,面试官:粗鲁!
    优雅的关闭线程池我们现在步入正题,来看一看在线程池使用完成后如何优雅的关闭线程池。在JDK1.8中,Java并发工具包中java.util.concurrent.ExecutorService提供了shutdown()、shutdownNow()这两种接口方法去关闭线程池,我们分别看一下。shutdown()publicvoidshutdo......
  • Python数据分析【Numpy系列】np.linspace()用法详解
    np.linspace()是NumPy库中一个非常有用的函数,它用于在指定的区间内生成等间距的样本值。这个函数非常适合在数值分析、数据可视化和信号处理等领域生成数据点。函数语法numpy.linspace(start,stop,num=50,endpoint=True,retstep=False,dtype=None,axis=0)......