草庐IT

NONBLOCKING

全部标签

sockets - C : what do I get? 中的非阻塞 udp 套接字编程

我无法理解recv()/recvfrom()从非阻塞UDP套接字返回的内容。与TCP相比更具体一些(如果我错了请纠正我):在缓冲区中有一些数据之前,阻塞套接字(TCP或UDP)不会从recv()返回。这可能是一些字节数(TCP)或完整的数据报(UDP)。非阻塞TCP套接字返回EWOULDBLOCK(linux)/WSAEWOULDBLOCK(windows)或当前缓冲区中的字节。由于TCP数据是一个流,因此返回多少字节并不重要。现在问题:如果没有可用数据,非阻塞UDP套接字也会返回WOULDBLOCK(linux)/WSAEWOULDBLOCK(windows)。但是,如果有数据可用,

java - 为什么是 "Multiplexed, non-blocking I/O, [..] much more scalable than thread-oriented, blocking I/O"?

我正在阅读JDK7文档(here)中有关channel的内容,并偶然发现了这个:Multiplexed,non-blockingI/O,whichismuchmorescalablethanthread-oriented,blockingI/O,[...]是否有关于为什么会这样的简单解释? 最佳答案 因为线程堆栈通常比支持异步I/O连接所需的数据结构大得多。此外,调度数千个线程效率低下。 关于java-为什么是"Multiplexed,non-blockingI/O,[..]muchmo

python - 如何确定非阻塞套接字是否真正连接?

本题不限于Python。这是一个一般的套接字问题。我有一个非阻塞套接字,想连接到一台可访问的机器——在另一边,端口不存在。为什么select(...)无论如何都会成功?我预计超时。sock.send(...)因管道损坏而失败。在select(...)之后如何确定套接字是否真的连接?提前致谢。importsocket,errno,os,time,selectsock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)sock.setblocking(0)err=sock.connect_ex(('192.168.178.21',12345))

python - python 的 SSH 模块

我必须在一台远程机器上完成一项工作(使用我的网络服务器),大约需要10分钟。我用过pxsshpython中的模块相同,但它给了我“超时错误”(非阻塞)。现在,我正在使用paramiko但是一旦给出指令,它就会返回。我希望网络服务器等到作业完成。是否有任何pythonSSH模块可用于此。或者我们可以通过更改pxssh或paramiko的任何配置设置来实现相同的目标吗? 最佳答案 您可以使用recv_exit_statusChannel上等待命令完成的方法:recv_exit_status(self)>Returntheexitstat

python - 如何从 Python 日志记录模块获取非阻塞/实时行为? (输出到 PyQt QTextBrowser)

描述:我编写了一个自定义日志处理程序,用于捕获日志事件并将它们写入QTextBrowser对象(工作示例代码如下所示)。问题:按下按钮会调用someProcess()。这会将两个字符串写入logger对象。但是,字符串仅在someProcess()返回后出现。问题:如何让记录的字符串立即/实时出现在QTextBrowser对象中?(即,一旦logger输出方法被调用)fromPyQt4importQtCore,QtGuiimportsysimporttimeimportlogginglogger=logging.getLogger(__name__)classConsoleWindow

Python:非阻塞套接字或异步 I/O

我是Python的新手,目前必须编写一个python套接字作为脚本运行,通过TCP/IP(气象站)与设备通信。设备充当服务器端(通过IP:PORT监听、接受连接、接收请求、传输数据)。我只需要发送一条消息,收到答复,然后平静而漂亮地关闭并关闭套接字。try:comSocket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)exceptsocket.error,msg:sys.stderr.write("[ERROR]%s\n"%msg[1])sys.exit(1)try:comSocket.connect((''))exceptsock

python - 如何获得非阻塞套接字连接()?

我这里有一个非常简单的问题。我需要同时与很多主机通信,但我真的不需要任何同步,因为每个请求都非常自给自足。因此,我选择使用异步套接字,而不是垃圾线程。现在我确实有一个小问题:异步的东西就像一个魅力,但是当我连接到100台主机时,我得到100次超时(超时=10秒)然后我等待1000秒,只是为了找出我所有的连接都失败了。有什么方法也可以实现非阻塞套接字连接吗?我的套接字已设置为非阻塞,但对connect()的调用仍在阻塞。减少超时不是一个可接受的解决方案。我在Python中执行此操作,但我想在这种情况下编程语言并不重要。我真的需要使用线程吗? 最佳答案

python - 执行非阻塞请求? - Django

我最近一直在玩其他框架,比如NodeJS。我喜欢返回响应的可能性,并且仍然能够进行进一步的操作。例如defview(request):do_something()returnHttpResponse()do_more_stuff()#notpossible!!!也许Django已经提供了一种在返回请求后执行操作的方法,如果是这样的话那就太好了。非常感谢您的帮助!=D 最佳答案 不是开箱即用,因为您已经从方法中返回。你可以使用类似Celery的东西这会将do_more_stuff任务传递到队列中,然后让它在http请求/响应流之外运行

php - 发送一个非阻塞的 HTTP POST 请求

我有两个php和python网站。当用户向服务器发送请求时,我需要php/python向远程服务器发送HTTPPOST请求。我想立即回复用户,而不是等待远程服务器的响应。是否可以在向用户发送响应后继续运行php/python脚本。在这种情况下,我将首先回复用户,然后才将HTTPPOST请求发送到远程服务器。是否可以在不处理响应的情况下在php/python中创建非阻塞HTTP客户端?我更喜欢在php和python中具有相同逻辑的解决方案。谢谢 最佳答案 在PHP中,您可以通过发送此请求来关闭连接(这与HTTP相关并且在python中

linux - redis 是否将客户端数量限制为 65K?

我使用的是Redis2.4.6稳定版。我已经将文件ae.h中的redis文件描述符的数量增加到超过200K:#defineAE_SETSIZE(1024*200)但是在运行它时我达到了65534的限制。我在RedHat实例的ec2上运行redis:2.6.32-220.2.1.el6.x86_64我正在使用ulimit-n200000运行redis我已经设置了多个ec2节点的测试,试图将并发连接推到超过150K,但它不会超过65K。关于我可以缺少什么的任何想法?也许是内核限制?Redis中的错误?这是redis服务器上的INFO转储:used_cpu_sys_children:0.00