select.select()文件句柄的限制

摘要

python中的select.select()函数调用了系统底层的select(),但是他有一个限制,就是当打开的文件句柄的数字达到1024后,就会出现下面的错误

ValueError: filedescriptor out of range in select()

正文

这个值在select()中对应的是FD_SETSIZE,下面我们写一段脚步来证明

#!/usr/bin/env python

import subprocess

import os

import select

import getpass

host = ‘example.com‘

timeout = 5

password = getpass.getpass(prompt="Enter your password:")

for i in range(1000):

(rfd, wfd) = os.pipe()

ssh_cmd = [‘sshpass‘, ‘-d%d ‘ % rfd]

ssh_cmd += [‘ssh‘, ‘%s‘ % host, ‘uptime‘]

print ssh_cmd

os.write(wfd, password + ‘\n‘)

p = subprocess.Popen(ssh_cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

rfd, wfd, efd = select.select([p.stdout, p.stderr], [], [p.stderr], timeout)

if rfd:

print p.stdout.read()

print p.stderr.read()

相关的文章可以参考

https://github.com/ansible/ansible/issues/10157

https://issues.apache.org/jira/browse/QPID-5588

https://github.com/ansible/ansible/issues/14143

时间: 2025-01-04 04:58:41

select.select()文件句柄的限制的相关文章

设置联动的<select></select>下拉选项菜单的默认值

送货地址/收货人: <span id="region"> <select class="w110"> </select> <input type="hidden" value="" name="city_id" id="city_id"> <input type="hidden" name="area_i

Python网络编程 (三)使用select.select()实现聊天服务器

第一步, 实现通用的send()和receive()函数: send函数定义通过cPicle.dumps()将需要发送的数据序列化,然后通过socket.htonl()方法将序列化后的数据长度转化为网络字节序格式,以便于底层传输,再将网络字节序格式的长度打包为'L'类型的C struct, 最后发送打包后的长度以及序列化后的数据 receive函数即是send反向过程,先接收到打包后的长度,将其解包,然后再主机序列化,所有数据接收完成以后,返回解除序列化后的原始数据. 1 def send(ch

ORACLE创建临时事务表global temporary table 和 查询时临时表with tempName as (select ) select

创建临时事务表只是保存当前会话(session)用到的数据,数据只在事务或会话期间存在,可规避多线程调用数据冲突问题 -- Create table create global temporary table TEM_FI_COURSE_CONFIG ( lgart VARCHAR2(20), komok VARCHAR2(20), sign VARCHAR2(20), lgart1 VARCHAR2(20), sign1 VARCHAR2(20), ktosl VARCHAR2(20), bs

关于MySQL中select (select...) from ... 查询

直接上例子: 新建A表结构及数据如下: 新建B表结构及数据如下: 其中:B表和A表是一对多的关系(1:n),B表的主键是A表的外键 SELECT A.ha, (SELECT B.haha FROM B WHERE B.id2 = A.id2 ) AS haha FROM A; 结果为: 这意味着:在A表中取字段,同时取B表中的字段作为其中一个字段显示. 其中,子句的查询结果并不影响原来A的记录条数.比如: SELECT A.ha, (SELECT B.haha FROM B WHERE B.id

&lt;select&gt;&lt;/select&gt; php表单怎么传值

<select name="cateid"> <volist name="cate" id="vo"> <option value="{$vo.id}">{$vo.catename}</option> </volist> </select> 原文地址:https://www.cnblogs.com/xm666/p/11617281.html

mybatis-plus @Select select in 查询实现

参考: https://www.jianshu.com/p/06672a2d6ca4 https://blog.csdn.net/apicescn/article/details/80508843 参考代码: <select id="yktestOrder" resultType="com.yuxun.fantuan.security.entity.User"> select u.id, u.username FROM user u WHERE 1 =

JS给HTML5页面&lt;Select&gt;&lt;/Select&gt;绑定选中项

例1: 1 //第二级案件类型发生改变 2 $("#SecondCasetypelist").change(function () { 3 var child = $("#SecondCasetypelist").children(); 4 var selecting = 0; 5 for (i = 0; i < child.length; i++) { 6 if (child[i].selected) { 7 selecting += 1; 8 } 9 }

Python下的select模块及方法解释

Python中有一个select模块,其中提供了:select.poll.epoll三个方法,分别调用系统的 select,poll,epoll 从而实现IO多路复用. Windows Python: 提供: select Mac Python: 提供: select Linux Python: 提供: select.poll.epoll 注意:网络操作.文件操作.终端操作等均属于IO操作,对于windows只支持Socket操作,其他系统支持其他IO操作,但是无法检测 普通文件操作 自动上次读

Python Select 解析

首先列一下,sellect.poll.epoll三者的区别 select select最早于1983年出现在4.2BSD中,它通过一个select()系统调用来监视多个文件描述符的数组(在linux中一切事物皆文件,块设备,socket连接等.),当select()返回后,该数组中就绪的文件描述符便会被内核修改标志位(变成ready),使得进程可以获得这些文件描述符从而进行后续的读写操作(select会不断监视网络接口的某个目录下有多少文件描述符变成ready状态[在网络接口中,过来一个连接就会