pythonqueue进程

1.python 标准库线程安全的队列是哪一个

python queue模块有三种队列:

1、python queue模块的FIFO队列先进先出。

2、LIFO类似于堆。即先进后出。

3、还有一种是优先级队列级别越低越先出来。

针对这三种队列分别有三个构造函数:

1、class Queue.Queue(maxsize) FIFO

2、class Queue.LifoQueue(maxsize) LIFO

3、class Queue.PriorityQueue(maxsize) 优先级队列

2.python 多线程和多进程的区别 mutiprocessing theading

GIL在Python中,由于历史原因(GIL),使得Python中多线程的效果非常不理想.GIL使得任何时刻Python只能利用一个CPU核,并且它的调度算法简单粗暴:多线程中,让每个线程运行一段时间t,然后强行挂起该线程,继而去运行其他线程,如此周而复始,直到所有线程结束.这使得无法有效利用计算机系统中的"局部性",频繁的线程切换也对缓存不是很友好,造成资源的浪费.据说Python官方曾经实现了一个去除GIL的Python解释器,但是其效果还不如有GIL的解释器,遂放弃.后来Python官方推出了"利用多进程替代多线程"的方案,在Python3中也有concurrent.futures这样的包,让我们的程序编写可以做到"简单和性能兼得".多进程/多线程+Queue一般来说,在Python中编写并发程序的经验是:计算密集型任务使用多进程,IO密集型任务使用多进程或者多线程.另外,因为涉及到资源共享,所以需要同步锁等一系列麻烦的步骤,代码编写不直观.另外一种好的思路是利用多进程/多线程+Queue的方法,可以避免加锁这样麻烦低效的方式.现在在Python2中利用Queue+多进程的方法来处理一个IO密集型任务.假设现在需要下载多个网页内容并进行解析,单进程的方式效率很低,所以使用多进程/多线程势在必行.我们可以先初始化一个tasks队列,里面将要存储的是一系列dest_url,同时开启4个进程向tasks中取任务然后执行,处理结果存储在一个results队列中,最后对results中的结果进行解析.最后关闭两个队列.下面是一些主要的逻辑代码.#-*-coding:utf-8-*-#IO密集型任务#多个进程同时下载多个网页#利用Queue+多进程#由于是IO密集型,所以同样可以利用threading模块():tasks=multiprocessing.JoinableQueue()results=multiprocessing.Queue()cpu_count=multiprocessing.cpu_count()#进程数目==CPU核数目create_process(tasks,results,cpu_count)#主进程马上创建一系列进程,但是由于阻塞队列tasks开始为空,副进程全部被阻塞add_tasks(tasks)#开始往tasks中添加任务parse(tasks,results)#最后主进程等待其他线程处理完成结果defcreate_process(tasks,results,cpu_count):for_inrange(cpu_count):p=multiprocessing.Process(target=_worker,args=(tasks,results))#根据_worker创建对应的进程p.daemon=True#让所有进程可以随主进程结束而结束p.start()#启动def_worker(tasks,results):whileTrue:#因为前面所有线程都设置了daemon=True,故不会无限循环try:task=tasks.get()#如果tasks中没有任务,则阻塞result=_download(task)results.put(result)#:tasks.task_done()defadd_tasks(tasks):forurlinget_urls():#get_urls()returnaurls_listtasks.put(url)defparse(tasks,results):try:tasks.join():print"Taskshasbeenstopped!".empty():_parse(results)if__name__=='__main__':main()利用Python3中的concurrent.futures包在Python3中可以利用concurrent.futures包,编写更加简单易用的多线程/多进程代码.其使用感觉和Java的concurrent框架很相似(借鉴?)比如下面的简单代码示例defhandler():futures=set()withconcurrent.futures.ProcessPoolExecutor(max_workers=cpu_count)asexecutor:fortaskinget_task(tasks):future=executor.submit(task)futures.add(future)defwait_for(futures):try:forfutureinconcurrent.futures.as_completed(futures):err=futures.exception()ifnoterr:result=future.result()else::forfutureinfutures:future.cancel()print"Taskhasbeencanceled!"printereturnresult总结要是一些大型Python项目也这般编写,那么效率也太低了.在Python中有许多已有的框架使用,使用它们起来更加高效.。

3.python 多queue有什么好处

死锁通常是因为你使用了锁。 在python里可以直接使用Queue,它自带了锁。你不需要自己设置一个锁。

所以严格来说,在python中,不需要锁。如果用到了锁,特别是多线程处理。要采用队列方式去解决,就没有这个问题了。

如果一定要用锁就存在死锁的情形。比如一个锁依赖另一个锁,在某种情形下,两者都打不开。特别是多线程的时候。

通常我们的办法是,在线程里设置一个心跳变量。在主线程里检查这个变量。如果一个线程长时间心跳停止 ,应该是死了。死锁也包括在内。

4.python多线程与多进程的概念与区别

1.什么是线程?

线程是操作系统能够进行运算调度的最小单位(程序执行流的最小单元)。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。

一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。由于线程之间的相互制约,致使线程在运行中呈现出间断性。线程也有就绪、阻塞和运行三种基本状态。就绪状态是指线程具备运行的所有条件,逻辑上可以运行,在等待处理机;运行状态是指线程占有处理机正在运行;阻塞状态是指线程在等待一个事件(如某个信号量),逻辑上不可执行。每一个程序都至少有一个线程,若程序只有一个线程,那就是程序本身。

线程是程序中一个单一的顺序控制流程。进程内一个相对独立的、可调度的执行单元,是系统独立调度和分派CPU的基本单位指运行中的程序的调度单位。在单个程序中同时运行多个线程完成不同的工作,称为多线程。

2.什么是进程?

进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。里面包含对各种资源的调用,内存的管理,网络接口的调用等。。。对各种资源管理的集合 就可以称为 进程

3.线程和进程的区别

(1)线程共享内存空间;进程的内存是独立的

(2)同一个进程的线程之间可以直接交流;两个进程想通信,必须通过一个中间代理来实现

(3)创建新线程很简单; 创建新进程需要对其父进程进行一次克隆

(4)一个线程可以控制和操作同一进程里的其他线程;但是进程只能操作子进程

(5)改变主线程(如优先权),可能会影响其它线程;改变父进程,不影响子进程

5.Python Stack 和 Queue 怎么应用

我记得collections里面是没有的,

list,queue.LifoQueue都可以当stack用,但是没有叫Stack的

而且queue.Queue和collections.dequeue是没有enqueue和dequeue这两个方法的。

reverse 方程的意思如果是把所有q中元素出队,push进栈,再从栈里面存回q的话,reverse的写法是错的。

正确的是这样:

def rev(q):

s = Stack()

while not q.is_empty():

s.push(q.dequeue())

while not s.is_empty():

q.enqueue(s.pop())

两个问题:

q.is_empty 永远为真,所以你其实没执行把队列元素存到栈里面这一步。这句等价于:

while not hasattr(q, "is_empty")

#正确的写法:

while not q.is_empty()

你的入队操作只做了一次。

pythonqueue进程

转载请注明出处编程代码网 » pythonqueue进程

资讯

linuxpythonnumpy

阅读(8)

本文主要为您介绍linuxpythonnumpy,内容包括在linux下的python中如何安装numpy,怎么在linux下安装numpy1.5.0,我的是ubuntu10.10跪求高手,如何安装pythonnumpy。基于你自己的操作系统命令行linuxapt-get install python-numpy或者pip insta

资讯

python代码分析

阅读(6)

本文主要为您介绍python代码分析,内容包括python代码解读,如何用python进行数据分析,python如何解析json代码分析。1 [ for i in range(0, 40, 8)] 是列表生成式,range(0, 40, 8)相当于是 [0, 8, 16,

资讯

python中文手册2.7

阅读(7)

本文主要为您介绍python中文手册2.7,内容包括请问Python2.7的IDLE(PythonGUI)、ModuleDocs、Python(command,请教如何用python2.7开发具有中文菜单的界面,python是2.7还是3.5。这个是idle:

资讯

python概率分布

阅读(6)

本文主要为您介绍python概率分布,内容包括如何在Python中实现这五类强大的概率分布,如何在Python中实现这五类强大的概率分布,如何在Python中实现这五类强大的概率分布。R编程语言已经成为统计分析中的事实标准。但在这篇文章中,我将告诉你

资讯

python类引用

阅读(6)

本文主要为您介绍python类引用,内容包括python怎么引用其他文件的类,python怎么在一个类中调用另一个类的方法,python如何调用类的方法。在导入文件的时候,Python只搜索当前脚本所在的目录,加载(entry-point)入口脚本运行目录和sys.path中包含

资讯

pythonfor计数器

阅读(7)

本文主要为您介绍pythonfor计数器,内容包括python的for循环怎么用,求大神给我一个python计算器以便学习,python怎么让下面代码循环5次。def cal(): numA = float(raw_input(Please enter a number: )) op = raw

资讯

pythonsocketip

阅读(7)

本文主要为您介绍pythonsocketip,内容包括python聊天室socket的ip怎么设置,(pythonsocket伪造client的ip地址)有一python写的socket服务端只接,用python写了一个服务器,这么知道它的ip。import socketlocalIP = socket.gethostbyname(socke

资讯

pythonuwsginginx

阅读(6)

本文主要为您介绍pythonuwsginginx,内容包括谁配置过uwsgi+nginx+python,我已经崩了,总是502错误,Nginx+Python怎么搞才好,在Linux系统上怎么通过uWSGI配置Nginx+Python环境。python服务后台运行由于python程序一般只有单进程,因此要用uwsgi

资讯

window安装python

阅读(7)

本文主要为您介绍window安装python,内容包括怎么在WINDOWS系统中安装Python,如何在Windows系统中安装Python,如何在windows下安装python。在WINDOWS中安装python的方法:下载python安装包2、双击安装程序python-2.5.2.msi3、选择Install

资讯

如何运行python命令

阅读(7)

本文主要为您介绍如何运行python命令,内容包括怎么用cmd运行python,怎么在命令提示符中运行python,如何运行Python程序的方法。用cmd运行python程序步骤:(1)打开cmd。

资讯

python是用什么写的

阅读(7)

本文主要为您介绍python是用什么写的,内容包括python是用什么语言编写的,Python是用什么语言写的,python是用C语言写的么。python的作用:1.系统编程:提供API(Application ProgrammingInterface应用程序编程接口),能方便

资讯

php爬虫python

阅读(6)

本文主要为您介绍php爬虫python,内容包括爬虫和python是什么关系,PHP不能写吗,Python和nodeJS哪个更适合做爬虫,php爬虫框架。1. pcntl_fork或者swoole_process实现多进程并发。按照每个网页抓取耗时500ms,开200个进程,可以实现每秒4

资讯

pythondef什么意思

阅读(7)

本文主要为您介绍pythondef什么意思,内容包括pythondef是什么意思,python里def什么意思,python里def:是叫函数还是方法。可以这样讲,def定义了一个模块的变量,或者说是类的变量。它本身是一个函数对象。属于对象的函数,就是对象的属性。当然,你

资讯

osx安装python

阅读(7)

本文主要为您介绍osx安装python,内容包括如何在MacOSX上安装Python3.3,如何在MacOSX上安装Python3.3,如何在osx下安装python3。安装前必须知道的工作:MAC OS 一般都自带 MAC Python,Apple自己扩展的版本。例如,Lion是64位Python版本,

资讯

python多进程共享

阅读(17)

本文主要为您介绍python多进程共享,内容包括用python多进程模块multiprocessing创建的子进程如何共享内存空间,Python怎么防止同一个程序出现多个进程,python中多进程+协程的使用以及为什么要用它。进程传递数据最简单方便的是通过Queue。

资讯

python进程id

阅读(10)

本文主要为您介绍python进程id,内容包括python中怎么根据进程号获取进程名,python中怎么根据进程号获取进程名,python怎么获得进程的pid。前言标准库是Python的一个组成部分。这些标准库是Python为你准备好的利器,可以让编程事半功倍。特别

资讯

python多进程与多线程

阅读(13)

本文主要为您介绍python多进程与多线程,内容包括python多线程与多进程的概念与区别,python多线程与多进程的概念与区别,有没有朋友们进来聊聊python的多线程和多进程。1.什么是线程?线程是操作系统能够进行运算调度的最小单位(程序执行流的最

资讯

python进程存在

阅读(13)

本文主要为您介绍python进程存在,内容包括python怎么查看进程是否存在,Python如何判断一个进程是否存在,python查看进程是否存在。#!/usr/bin/env pythonimport osimport signal# Change this to your pro

资讯

守护进程python

阅读(12)

本文主要为您介绍守护进程python,内容包括如何在python脚本中新建一个守护子进程,如何在python脚本中新建一个守护子进程,linuxpython守护进程编写包括什么。函数实现 [html] view plaincopy #!/usr/bin/env python #coding: utf-8 impo

资讯

python进程守护

阅读(12)

本文主要为您介绍python进程守护,内容包括如何在python脚本中新建一个守护子进程,如何在python脚本中新建一个守护子进程,ubuntupython怎么作为守护进程一直运行。函数实现[html] view plaincopy#!/usr/bin/env python#coding: utf-8import

资讯

python进程创建

阅读(14)

本文主要为您介绍python进程创建,内容包括python使用multiprocessing创建进程怎么结束进程,python可以先创建多进程,然后再个每个子进程创建多个线程吗,为什么python2.7中用Process创建子进程的语句之前必须加#if。任何一种编程语言,启动进

资讯

python进程内存

阅读(12)

本文主要为您介绍python进程内存,内容包括怎么用python查询出进程CPU使用率内存使用句柄数,python怎么获取自身进程的CPU和内存使用情况,Python如何读取一个进程的内存内容比如我在复制了一个文本,那怎。看到句柄数这几个字,我猜可能是要win

资讯

python读取汉字

阅读(2)

本文主要为您介绍python读取汉字,内容包括python读取的中文怎么使用,python怎么读取文本中的汉字,python怎么读取文本中的汉字。在python脚本的第一行加上#encoding=utf-8即可。程序如下:Created on 2011-9-24@author: l

资讯

python数组行列

阅读(2)

本文主要为您介绍python数组行列,内容包括python3如何把由坐标构成的一维数组转换成行列分别为xy值的二维数组,python中怎样让数据列转置,python怎么输入一个数组矩阵。需求:你需要转置一个二维数组,将行列互换.讨论:你需要确保该数组的行列数

资讯

跳板机python

阅读(2)

本文主要为您介绍跳板机python,内容包括如何直接通过跳板机ssh到服务器,如何无视跳板机,如何直接通过跳板机ssh到服务器。公司连上远程游戏服需要先ssh登到跳板机,再在跳板机上ssh到远程,不能直连,如:自己的系统(Mac OS) ===> 跳板机 =

资讯

python公开课

阅读(2)

本文主要为您介绍python公开课,内容包括Python教学视频实用型的哪里有,哪的Python视频教程比较好,有什么比较好的Python学习教程。随着人工智能时代呼声渐起,Python凭借其入门简单、应用广泛的优势成为很多想要入行互联网行业的人们的首选编

资讯

python二进制文件读取

阅读(2)

本文主要为您介绍python二进制文件读取,内容包括在python中如何从二进制文件中读取信息,在python中如何从二进制文件中读取信息,python二进制文件的读取与写入可以分别使用和方法。你是指读入二进制文件吧?可以使用numpy.fromfile(),也可以使

资讯

python黑客pdf

阅读(2)

本文主要为您介绍python黑客pdf,内容包括为什么很多关于python的黑客书,我想成为一名黑客,我在学python,可是里面讲的多是游戏设计,能否,求黑客书籍资源。学习是循序渐进的过程最常见的有两本python和黑客相关的书《python灰帽子:黑客与逆向

资讯

pythonexcel中文

阅读(2)

本文主要为您介绍pythonexcel中文,内容包括python怎么读excel中文,python怎么将中文写入excel文档,python怎么输出中文文件名excel。简单的介绍一下这两个库,先说xlrd,这个库读excel比较方便,各种方法使用起来也挺方便:bk = xlrd.open_workboo

资讯

apachepythonlinux

阅读(2)

本文主要为您介绍apachepythonlinux,内容包括请教一个关于linux下APACHE关于PYTHON的设置问题,linux配置apache和python的环境,modpython在安装的报错处理,在线,如何在Apache下设置Python。二、linux下apache配置python 一.安装apache apac

资讯

chainPython

阅读(2)

本文主要为您介绍chainPython,内容包括ord在python是什么意思怎么使用,Python大神解释一下吧,python中round函数怎么用。>>>help(ord)Help on built-in function ord in module builtins:ord() #

资讯

python添加一行

阅读(2)

本文主要为您介绍python添加一行,内容包括python怎么实现数组增加一行或多行,python如何将字符串增加一行,python怎么实现数组增加一行或多行。把文档全部作为一个字符串,字符串可以相加, 如在1.doc里添加s 和d,用>>>file=open(1.doc,r)>>>str