python2线程池_python 线程池调用类方法不执行?
原因是实例方法不能被pickle。上面的代码并不是执行没有错误,只是错误没有被报出来。错误只有在调用结果时,才会报错。如下:
import os
import time
from multiprocessing import Pool
import random
class MyThread(object):
def long_time_task(self,i):
print 'Run task %s (%s)...' % (i, os.getpid())
time.sleep(random.random() * 3)
print i
def parse_thread(self):
print 'Parent process %s.' % os.getpid()
p = Pool()
results = []
for i in range(10):
results.append(p.apply_async(self.long_time_task,args=(i,)))
# If trying to get the result, error will be reported here
for res in results:
print res.get()
print 'Waiting for all subprocesses done...'
p.close()
p.join()
print 'All subprocesses done.'
def main():
print "start"
tt=MyThread()
tt.parse_thread()
if __name__=="__main__"
main()
运行结果会在print res.get() 那一行报错,错误如下:
PicklingError: Can't pickle : attribute lookup __builtin__.instancemethod failed
解决方法:用一个可被实例化的普通函数包装类方法,将实例对象作为参数传递给函数即可。代码如下:
class MyThread(object):
def __init__(self, func):
self.func = func
def long_time_task(self,i):
print 'Run task %s (%s)...' % (i, os.getpid())
time.sleep(random.random() * 3)
print i
return (i, os.getpid())
def parse_thread(self):
print 'Parent process %s.' % os.getpid()
p = Pool()
results = []
for i in range(10):
results.append(p.apply_async(long_time_task_wrapper,args=(self,i,)))
# Now can get the result
for res in results:
print res.get()
print 'Waiting for all subprocesses done...'
p.close()
p.join()
print 'All subprocesses done.'
def long_time_task_wrapper(cls_instance, i):
return cls_instance.long_time_task(i)
def main():
print "start"
tt=MyThread(long_time_task_wrapper)
tt.parse_thread()
if __name__=="__main__":
main()
运行结果如下:
start
Parent process 3604.
(0, 6412)
(1, 3904)
(2, 2528)
(3, 5492)
(4, 5492)
(5, 5492)
(6, 5492)
(7, 6412)
(8, 5492)
(9, 6412)
Waiting for all subprocesses done...
Run task 2 (2528)...
2
Run task 1 (3904)...
1
Run task 3 (5492)...
3
Run task 4 (5492)...
4
Run task 5 (5492)...
5
Run task 6 (5492)...
6
Run task 8 (5492)...
8
Run task 0 (6412)...
0
Run task 7 (6412)...
7
Run task 9 (6412)...
9
All subprocesses done.
希望对你有帮助。
python2线程池_python 线程池调用类方法不执行?相关推荐
- python 线程池_Python线程池及其原理和使用(超级详细)
系统启动一个新线程的成本是比较高的,因为它涉及与操作系统的交互.在这种情形下,使用线程池可以很好地提升性能,尤其是当程序中需要创建大量生存期很短暂的线程时,更应该考虑使用线程池. 线程池在系统启动时即 ...
- python 线程池_python线程池
线程池概念 什么是线程池? 诸如web服务器.数据库服务器.文件服务器和邮件服务器等许多服务器应用都面向处理来自某些远程来源的大量短小的任务. 构建服务器应用程序的一个过于简单的模型是:每当一个请求到 ...
- python线程创建对象_python线程池菜鸟教程
这篇文章主要为大家详细介绍了python线程池菜鸟教程,具有一定的参考价值,可以用来参考一下. 对python这个高级语言感兴趣的小伙伴,下面一起跟随512笔记的小编两巴掌来看看吧! 线程池的概念是什 ...
- python 判断线程状态_Python线程指南
Python线程指南 本文介绍了Python对于线程的支持,包括"学会"多线程编程需要掌握的基础以及Python两个线程标准库的完整介绍及使用示例. 注意:本文基于Python2. ...
- python线程状态_Python线程
1. 线程基础 1.1. 线程状态 线程有5种状态,状态转换的过程如下图所示: 1.2. 线程同步(锁) 多线程的优势在于可以同时运行多个任务(至少感觉起来是这样).但是当线程需要共享数据时,可能存在 ...
- python 线程退出_python线程退出
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 如果某线程并未使用很多 io 操作, 它会在自己的时间片内一直占用处理器(和 g ...
- python进程池_python进程池剖析(一)
python中两个常用来处理进程的模块分别是subprocess和multiprocessing,其中subprocess通常用于执行外部程序,比如一些第三方应用程序,而不是Python程序.如果需要 ...
- python 判断线程状态_Python 线程和进程
前言 学编程,谁没有为线程折腾过啊. 目录 线程与进程 线程与进程是操作系统里面的术语,简单来讲,每一个应用程序都有一个自己的进程. 操作系统会为这些进程分配一些执行资源,例如内存空间等. 在进程中, ...
- python结束线程类_Python线程指南(转)
1. 线程基础 1.1. 线程状态 线程有5种状态,状态转换的过程如下图所示: 1.2. 线程同步(锁) 多线程的优势在于可以同时运行多个任务(至少感觉起来是这样).但是当线程需要共享数据时,可能存在 ...
- python 线程同步_python线程同步(2)
Barrier 有人翻译成栅栏,建议使用屏障,可以想象成路障,道闸. 3.2引入python的新功能. Barrier(parties,action = None,timeout = None):构 ...
最新文章
- Java的深拷贝和浅拷贝
- step1.day12 Linux下使用C语言编程基础总结
- eclipse更新time out的问题
- vue设置金额和时间格式(团购倒计时下次一定)
- ActiveReports 报表应用教程 (7)---交叉报表及数据透视图实现方案
- 利用mergeAttributes设置name属性
- bat脚本保存dir结果_DOS批处理脚本及应用举例
- 记一次搜外吹牛皮回答之旅,如何提升关键词排名
- MyBatis的下载
- 最新win10系统下载64位
- 墨画子卿第四章第5节:两个时辰
- AE插件哪款好?这5款堪称动效设计必备
- Win10删除文件夹
- C语言:求最大公约数和最小公倍数
- SAP之Suse For SAP 12 sp5安装教程(超详细)
- 安装打印机一直显示设备未连接到服务器,HP M401驱动安装失败 一直显示连接设备无法安装的解决办法...
- NX二次开发 矩阵向量坐标 UFUN判断两个三维向量是否垂直 UF_VEC3_is_perpendicular
- Good Luck!
- 软件测试常用词汇表(中英对照解释)
- 程序猿投资理财篇——基金投资技巧2