#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. godoc

    Godoc-一个Go代码文档化工具 Python - Docstring Java - javadoc

  2. hql- 使用like的小坑①

    like '%_test_' 要把反斜杠进行转义like '%\_test\_'

  3. 解决css冲突的问题

    在各个框架中,每个例子都会自带一些样式. 拼接的时候都是全局的,或者同样修改了某个地方,就会产生冲突. 方法一: 首先导入全局,然后再导入其他的进行覆盖 方法二: 给样式添加作用域,只要当前作用域中起 ...

  4. ES6使用fetch请求数据

    ie是完全不支持fetch的. fetch(url,{method:"get/post"}).then(res=>{   }) 如果请求返回的status是200,body是 ...

  5. CodeSampler DX9 Full-screen initialization

    D3D新手,请轻拍. 最近在学CodeSampler上的DX9范例.编译环境是VS2012.搭编译环境用了一两天,另行开文吐槽(有时间的话). 本文讲讲Full-screen initializati ...

  6. redux之applyMiddleware

    redux之所以伟大就在于中间件了,中间件为redux提供了无限可能.redux中中间件是一个不太容易理解的概念,因为涉及到compose.hoc等函数式的概念,看源代码总是懵懵的感觉.今天我们就来详 ...

  7. HTML基本格式和文本元素(标签)介绍

    <!doctype html>//声明文档类型 <html lang="zh-cn">//文档开始,后面是声明是中文页面的意思,en是英语的意思 <h ...

  8. UE4动画及相关物理的更新顺序图

  9. ADC_DMA_TIM

    /************************************************************************** * 文件名:ADC.h * * 编写人:离逝的风 ...

  10. Python学习过程中各个难点---数据类型篇

    ---恢复内容开始--- 当时在学习python的基本数据类型时,对于可变与不可变类型不是了解的很透彻,这篇是回过头来自己的一些理解. 可变的数据类型有列表,不可变的数据类型有字符串,数字和元组   ...