我正在编写一个多线程类.该类具有parallel_process()函数,该函数被并行任务覆盖.要处理的数据放入队列中.每个线程中的worker()函数一直调用parallel_process(),直到队列为空.结果放入结果队列对象中.类的定义是:

import threading

try:

from Queue import Queue

except ImportError:

from queue import Queue

class Parallel:

def __init__(self, pkgs, common=None, nthreads=1):

self.nthreads = nthreads

self.threads = []

self.queue = Queue()

self.results = Queue()

self.common = common

for pkg in pkgs:

self.queue.put(pkg)

def parallel_process(self, pkg, common):

pass

def worker(self):

while not self.queue.empty():

pkg = self.queue.get()

self.results.put(self.parallel_process(pkg, self.common))

self.queue.task_done()

return

def start(self):

for i in range(self.nthreads):

t = threading.Thread(target=self.worker)

t.daemon = False

t.start()

self.threads.append(t)

def wait_for_threads(self):

print('Waiting on queue to empty...')

self.queue.join()

print('Queue processed. Joining threads...')

for t in self.threads:

t.join()

print('...Thread joined.')

def get_results(self):

results = []

print('Obtaining results...')

while not self.results.empty():

results.append(self.results.get())

return results

我用它来创建一个并行任务:

class myParallel(Parallel): # return square of numbers in a list

def parallel_process(self, pkg, common):

return pkg**2

p = myParallel(range(50),nthreads=4)

p.start()

p.wait_for_threads()

r = p.get_results()

print('FINISHED')

但是,每次运行代码时,所有线程都不会加入.有时只有2个联接,有时没有线程联接.我认为我不会阻止线程完成工作.为什么join()在这里不起作用是什么原因?

python多线程没用_为什么我无法在python中加入该线程?相关推荐

  1. python多线程原理_代码详解Python多线程、多进程、协程-阿里云开发者社区

    云栖号资讯:[点击查看更多行业资讯] 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 一.前言 很多时候我们写了一个爬虫,实现了需求后会发现了很多值得改进的地方,其中很重要的一点就是爬 ...

  2. python 多线程并发_寻找python大神!!!python如何多线程并发?

    不是大神.尝试回答一下. 首先解释下什么叫做线程,什么叫做进程,在解释这两个概念前,我们还需要明白什么叫做GIL全局解释器锁.GIL 全局解释器锁: GIL(全局解释器锁,GIL 只有cpython有 ...

  3. python多线程没用_Python 的多线程原来不是真的多线程啊

    55 2019-11-23 00:43:59 +08:00 1 所以这些 CS 导论就该明确方向的系列问题怎么还那么经-- 还是得从基础概念入手. https://stackoverflow.com/ ...

  4. 怎么用python自制计算公式_手把手教你用python制作简易计算器,能够记录你使用的情况...

    话不多说,首先先看效果图,它能够记录你在使用过程中的历史,方便你查看是否有错: 接下来就仔细分析一下是如何制作的: 简易计算器 第一步:导入资源库 在过程中使用到了tkinter这个资源库,win+R ...

  5. python做运动控制_第一课:用Python操控小龟小车运动

    欢迎来到小龟的课堂,今天我们讲如何用小龟小车的车载Python控制小车运动. 如果小伙伴还不会使用小龟小车的Python编辑器的话,可以阅读这篇教程<如何使用小龟小车的Python编辑器> ...

  6. print python excel分隔_合并/拆分 Excel?Python、VBA轻松自动化

    作者 | Ryoko 来源 | 凹凸数据 当你收集了 n 个人的 EXCEL 记录表,需要将它们汇成一个总表时你会怎么做呢? 如果不通过技术手段,要一个个打开再复制粘贴也太麻烦了吧! 此时就需要一个通 ...

  7. python深度爬虫_总结:常用的 Python 爬虫技巧

    用python也差不多一年多了,python应用最多的场景还是web快速开发.爬虫.自动化运维:写过简单网站.写过自动发帖脚本.写过收发邮件脚本.写过简单验证码识别脚本. 爬虫在开发过程中也有很多复用 ...

  8. 新手python爬虫代码_新手小白必看 Python爬虫学习路线全面指导

    爬虫是大家公认的入门Python最好方式,没有之一.虽然Python有很多应用的方向,但爬虫对于新手小白而言更友好,原理也更简单,几行代码就能实现基本的爬虫,零基础也能快速入门,让新手小白体会更大的成 ...

  9. cv2 python 多线程调用摄像头_2种方法用python调用cv2模块给图片打马赛克

    1 说明: ===== 1.1 因各种需要,给图片打马赛克,当然本人着重介绍python用cv2的方法,主要讲解python和cv2的相关编程知识. 1.2 cv2模块:是OpenCV的python调 ...

最新文章

  1. 敏捷估算和计划的12条知道原则
  2. 深入浅出解释FFT(六)——深入理解fft变换
  3. 解决fstream不能打开带有中文路径文件的问题
  4. symantec 5220牛刀小试系列(二)
  5. Windows8/Silverlight/WPF/WP7/HTML5周学习导读(1月1日-1月6日)
  6. 简单介绍下我使用了一年多还不知道的Sql server 2005 组件知识
  7. ubuntu下安装jdk1.6.0_41
  8. iPhone 13高端版所需120Hz刷新率屏幕或将由三星独家供应
  9. 中小学生Python课应该学什么
  10. SDN/NFV在演进中探寻路径
  11. android 调出键盘表情_keyboard dialog 仿微博表情键盘输入框,keyboarddialog
  12. mysql 左连接写法_mysql左连接复杂正确写法
  13. 5x2cv配对t检验(5x2cv paired t test)
  14. P、NP、NPC问题
  15. iOS 开发: 仿QQ
  16. 填坑—c语言写单片机中断程序无法返回到中断点—解决办法
  17. 校招进大厂的Tips
  18. Excel学习日记:L27-数据重复怎么办
  19. GPS-Uber:一个用于预测一般和e3特异性赖氨酸泛素化位点的混合学习框架
  20. Mac OS X常用软件介绍

热门文章

  1. 对sigma pix 的理解
  2. 17种transformers
  3. 高可用集群技术之heartbeat应用详解(一)
  4. 从java中的hibernate看Ado.net 与NHibernate的关系
  5. 面试官:讲讲Spring框架Bean的加载过程
  6. IndexError: too many indices for array
  7. Pandas对不同类型缺失值的转换规则
  8. 特来电监控引擎流计算应用实践
  9. [APB VNext 笔记] UI
  10. 图片剪切空指针崩溃问题在Android 6.0系统出现