#encoding=utf-8
from threading import Thread
from multiprocessing import Process
import multiprocessing
'''
Author liuyancong
''' class My_Job_With_Thread(Thread):
def run(self):
t_flag = True
b = None
try:
b = self._Thread__target(*self._Thread__args, **self._Thread__kwargs)
except AttributeError as e:
b = self._target(*self._args, **self._kwargs)
t_flag = False
finally:
if t_flag:
del self._Thread__target;del self._Thread__args;del self._Thread__kwargs
else:
del self._target, self._args, self._kwargs
# TODO 你可以在这做你想做的事情
print(b) class My_Job_With_Process(Process):
def run(self):
res = None
if self._target:
res = self._target(*self._args, **self._kwargs)
print (res)
#TODO 你可以在这做你想做的事情 def k(b):
print('K方法开始执行')
return b if __name__ == '__main__':
My_Job_With_Process(target=k, args=('lyc_Process',)).start()
My_Job_With_Thread(target=k,args=('lyc_Thread',)).start()
print('end')

1 、我们重写线程和进程类的run方法,首先是加上它们原来的代码,然后再执行自己的逻辑,保证自己传入的函数正常运行。

因为py2 和py3的线程run方法不同所以这里做了异常捕获来对完成代码。

py27下  Thread的run 方法如下(使用了类的私有属性 __属性名):所以我们通过   self._类名__属性名  来获取如

def run(self):
"""Method representing the thread's activity. You may override this method in a subclass. The standard run() method
invokes the callable object passed to the object's constructor as the
target argument, if any, with sequential and keyword arguments taken
from the args and kwargs arguments, respectively. """
try:
if self.__target: #在子类中使用 self._Thread__target来获取
self.__target(*self.__args, **self.__kwargs) finally: # Avoid a refcycle if the thread is running a function with # an argument that has a member that points to the thread. del self.__target, self.__args, self.__kwargs

而在py3中 Thread的run 方法如下:

2 、因为Process类在Windows平台下只能运行在  

if __name__ == '__main__': 下面
所以我们在这里使用了这个,Thread就没有这个限制,其实可以在这样写
My_Job_With_Thread(target=k,args=('lyc_Thread',)).start()
if __name__ == '__main__':
My_Job_With_Process(target=k, args=('lyc_Process',)).start()
print('end')

3、经过这样重写继承,我们就可以在自己启动的进程或者线程中去处理自己传入的函数的结果,这样可以满足一些比较奇葩的需求。

												

Python 高度定制化自己的线程类和进程类代码,获取启动进程或线程方法的结果(兼容Py2和Py3)的更多相关文章

  1. PLDroidPlayer 是七牛推出的一款免费的适用于 Android 平台的播放器 SDK,采用全自研的跨平台播放内核,拥有丰富的功能和优异的性能,可高度定制化和二次开发。 https://developer.qiniu.com/pili/sdk/…

    PLDroidPlayer PLDroidPlayer 是一个适用于 Android 平台的音视频播放器 SDK,可高度定制化和二次开发,为 Android 开发者提供了简单.快捷的接口,帮助开发者在 ...

  2. 利用Python实现高度定制专属RSS

    前言 本文转载自个人博客网站,欢迎来访订阅.本篇属于定制RSS系列终极一弹,是三种方式中自由度最高.定制化最强的,也需要一定的编程能力.附上前两篇链接:1.利用Feed43为网站自制RSS源:2.如何 ...

  3. 基于百度EasyDL定制化图像识别平台的海洋鱼类识别方法

    [目的]鱼类识别对渔业资源的开发利用有着重要的意义.针对海底环境恶劣.拍摄环境亮度低.场景模糊的实际情况导致海底观测视频品质差,视频中的鱼类识别难的问题以及现有鱼类识别方法存在的鱼类标注数据集过少导致 ...

  4. (并发编程)线程 (理论-创建-lock-属性-守护,与进程的对比)

    一.线程理论1.什么是线程   线程指的是一条流水线的工作过程(执行代码)   进程不是执行单位,是资源单位   一个进程内自带一个线程,线程是执行单位 2.进程VS线程    1.同一进程内的线程们 ...

  5. Android 线程池的类型、区别以及为何要用线程池

    每个 Android 应用进程在创建时,会同时创建一个线程,我们称之为主线程,负责更新 UI 界面以及和处理用户之间的交互,因此,在 Android 中,我们又称之为 UI 线程.一个进程中 UI 线 ...

  6. kettle系列-4.kettle定制化开发工具类

    要说的话这个工具类还是比较简单的,每个方法体都比较小,但用起来还是可以的,把开发中一些常用的步骤封装了下,不用去kettle源码中找相关操作的具体实现了. 算了废话不多了,直接上重点,代码如下: im ...

  7. python基础——定制类

    python基础——定制类 看到类似__slots__这种形如__xxx__的变量或者函数名就要注意,这些在Python中是有特殊用途的. __slots__我们已经知道怎么用了,__len__()方 ...

  8. python+robot framework实现测报告定制化和邮件发送

    前面已经介绍了python+robot framework自动化框架和基本原理的实现,详情请看 python+robot framework接口自动化测试 本章主要讲解报告已经产生那如何以自动化的方式 ...

  9. 【Python】__slots__ 、@property、多重继承、定制类、枚举类、元类

    __slots__ @property 多重继承 定制类 枚举类 元类 [使用__slots__] 1.动态语言的一个特点就是允许给实例绑定任意的方法和变量,而静态语言(例如Java)必须事先将属性方 ...

随机推荐

  1. Numpy Ndarray对象

    Numpy 最重要的一个特点是 N 维数组对象 ndarrary ,它是一系列同类型数据的集合,以 0 下标为开始进行集合中的索引. ndarray 对象是用于存放同类型元素的多维数组. ndarra ...

  2. 当多线程并发遇到Actor

    https://mp.weixin.qq.com/s/mzZatZ10Rh19IEgQvbhGUg

  3. ldd源码编译出现的问题

    1.Fix it to use EXTRA_CFLAGS.  Stop 1). # make KBUILD_NOPEDANTIC=12). Relace all CFLAGS with EXTRA_C ...

  4. SQL语句操作数据

    --切换数据库:手动切换和命令切换 use MySchool --向Student表中插入数据 --语法:INSERT [INTO] 表名 (列名) VALUES (值列表) --注意事项: --1. ...

  5. oracle 数据定义语言(DDL)语法

    DDL语言包括数据库对象的创建(create).删除(drop)和修改(alter)的操作 1.创建表语法 create table table_name( column_name datatype  ...

  6. clouderamanager安装

    下载地址 http://archive.cloudera.com/cm5/cm/5/ 安装 先安装manager,再安装cdh 待续

  7. 常用API2 正则表达式

    正则表达式 正则表达式的概念 正则表达式(Regular Expression ,在代码中常简写为regex) 正则表达式是一个字符串,使用单个字符串来描述.用来定义匹配规则,匹配一系列符合某个句法规 ...

  8. vue脚手架的使用

    npm install -g @vue/cli    --全局环境安装vue/cli vue create <project-name> 在创建项目时你会被提示选取一个 preset.你可 ...

  9. 移动 web 适配

    一.移动 web 开发与适配 1.跑在手机端的 web 页面(H5 页面) 2.跨平台(PC 端.手机端 - 安卓.IOS) 3.基于 webview(终端开发技术的一个组件) 4.告别 IE 拥抱  ...

  10. Atcoder Beginner Contest 115 D Christmas 模拟,递归 B

    D - Christmas Time limit : 2sec / Memory limit : 1024MB Score : 400 points Problem Statement In some ...