原因是实例方法不能被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 线程池调用类方法不执行?相关推荐

  1. python 线程池_Python线程池及其原理和使用(超级详细)

    系统启动一个新线程的成本是比较高的,因为它涉及与操作系统的交互.在这种情形下,使用线程池可以很好地提升性能,尤其是当程序中需要创建大量生存期很短暂的线程时,更应该考虑使用线程池. 线程池在系统启动时即 ...

  2. python 线程池_python线程池

    线程池概念 什么是线程池? 诸如web服务器.数据库服务器.文件服务器和邮件服务器等许多服务器应用都面向处理来自某些远程来源的大量短小的任务. 构建服务器应用程序的一个过于简单的模型是:每当一个请求到 ...

  3. python线程创建对象_python线程池菜鸟教程

    这篇文章主要为大家详细介绍了python线程池菜鸟教程,具有一定的参考价值,可以用来参考一下. 对python这个高级语言感兴趣的小伙伴,下面一起跟随512笔记的小编两巴掌来看看吧! 线程池的概念是什 ...

  4. python 判断线程状态_Python线程指南

    Python线程指南 本文介绍了Python对于线程的支持,包括"学会"多线程编程需要掌握的基础以及Python两个线程标准库的完整介绍及使用示例. 注意:本文基于Python2. ...

  5. python线程状态_Python线程

    1. 线程基础 1.1. 线程状态 线程有5种状态,状态转换的过程如下图所示: 1.2. 线程同步(锁) 多线程的优势在于可以同时运行多个任务(至少感觉起来是这样).但是当线程需要共享数据时,可能存在 ...

  6. python 线程退出_python线程退出

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 如果某线程并未使用很多 io 操作, 它会在自己的时间片内一直占用处理器(和 g ...

  7. python进程池_python进程池剖析(一)

    python中两个常用来处理进程的模块分别是subprocess和multiprocessing,其中subprocess通常用于执行外部程序,比如一些第三方应用程序,而不是Python程序.如果需要 ...

  8. python 判断线程状态_Python 线程和进程

    前言 学编程,谁没有为线程折腾过啊. 目录 线程与进程 线程与进程是操作系统里面的术语,简单来讲,每一个应用程序都有一个自己的进程. 操作系统会为这些进程分配一些执行资源,例如内存空间等. 在进程中, ...

  9. python结束线程类_Python线程指南(转)

    1. 线程基础 1.1. 线程状态 线程有5种状态,状态转换的过程如下图所示: 1.2. 线程同步(锁) 多线程的优势在于可以同时运行多个任务(至少感觉起来是这样).但是当线程需要共享数据时,可能存在 ...

  10. python 线程同步_python线程同步(2)

    Barrier 有人翻译成栅栏,建议使用屏障,可以想象成路障,道闸. 3.2引入python的新功能. Barrier(parties,action  = None,timeout = None):构 ...

最新文章

  1. Java的深拷贝和浅拷贝
  2. step1.day12 Linux下使用C语言编程基础总结
  3. eclipse更新time out的问题
  4. vue设置金额和时间格式(团购倒计时下次一定)
  5. ActiveReports 报表应用教程 (7)---交叉报表及数据透视图实现方案
  6. 利用mergeAttributes设置name属性
  7. bat脚本保存dir结果_DOS批处理脚本及应用举例
  8. 记一次搜外吹牛皮回答之旅,如何提升关键词排名
  9. MyBatis的下载
  10. 最新win10系统下载64位
  11. 墨画子卿第四章第5节:两个时辰
  12. AE插件哪款好?这5款堪称动效设计必备
  13. Win10删除文件夹
  14. C语言:求最大公约数和最小公倍数
  15. SAP之Suse For SAP 12 sp5安装教程(超详细)
  16. 安装打印机一直显示设备未连接到服务器,HP M401驱动安装失败 一直显示连接设备无法安装的解决办法...
  17. NX二次开发 矩阵向量坐标 UFUN判断两个三维向量是否垂直 UF_VEC3_is_perpendicular
  18. Good Luck!
  19. 软件测试常用词汇表(中英对照解释)
  20. 程序猿投资理财篇——基金投资技巧2

热门文章

  1. java二级题库软件_无忧考吧二级JAVA超级模拟软件
  2. TR外汇黑平台资金盘深度揭秘,谨防上当受骗,迟早会跑路
  3. 360录屏时去掉跑马灯解决方法 以失败告终
  4. 使用IDEA连接linux服务器
  5. qt 语言设置乱码_QT中文乱码与国际化支持
  6. java 算法之快速排序
  7. Coursera学科分类爬虫实例介绍
  8. sap固定资产号码范围_SAP--FI详细解---固定资产
  9. 如何彻底修改SQL server的数据库名
  10. 2003系统企业版镜像服务器,Windows Server 2003 R2/SP2简体中文企业版原版镜像