Tag: nonblocking

一起使用烧瓶和龙卷风?

我是Flask的忠实粉丝 – 部分原因是它很简单,部分原因是因为它有很多扩展 。 然而,Flask是为了在WSGI环境中使用,WSGI不是非阻塞的,所以(我相信)对于某些types的应用程序来说,它不能像Tornado那样扩展。 由于每个人都有一个URL调度器将调用一个函数,都将使用Python文件(在Django中,你不启动python文件,但在烧瓶或龙卷风你做)是否有意义,有两个单独的部分到您的网站 – 一部分是用Tornado运行非阻塞作业,另一部分是用Flask写的? 如果这是一个好主意,你会怎么去分享Flask和Tornado之间的cookies /会话? 我会遇到问题,因为烧瓶将使用自己的系统,龙卷风将使用自己的系统?

为什么只读打开一个命名pipe道块?

在使用Python处理各种UNIX(Linux,FreeBSD和MacOS X)命名pipe道(FIFOs)时,我注意到了一些奇怪的地方。 第一个,也许是最烦人的是试图打开一个空/空闲的FIFO只读将阻塞(除非我使用os.O_NONBLOCK与os.open()调用较低级别)。 但是,如果我打开它的读/写,那么我没有阻止。 例子: f = open('./myfifo', 'r') # Blocks unless data is already in the pipe f = os.open('./myfifo', os.O_RDONLY) # ditto # Contrast to: f = open('./myfifo', 'w+') # does NOT block f = os.open('./myfifo', os.O_RDWR) # ditto f = os.open('./myfifo', os.O_RDONLY|os.O_NONBLOCK) # ditto 我只是好奇,为什么。 为什么打开的调用块,而不是一些后续的读取操作? 另外我注意到一个非阻塞文件描述符可以在Python中performance出不同的行为。 在os.open()和os.O_NONBLOCK用于初始打开操作的情况下,如果文件描述符中的数据没有准备好, os.read()似乎会返回一个空string。 但是,如果我使用fcntl.fcnt(f.fileno(), fcntl.F_SETFL, fcntl.GETFL […]

Python的socket.recv()返回非阻塞套接字是什么,如果没有数据收到直到发生超时?

基本上,我已经读了几个地方, socket.recv()将返回任何它可以读取,或者一个空string,表明另一方已经closures(官方文档甚至没有提到什么时候连接是什么closures…太棒了!)。 因为我们知道recv()只有在实际有东西需要接收的时候才会返回,所以当它返回一个空string时,它必须意味着另一端已经closures了连接,对吗? 好的,好吧,但是当我的套接字是非阻塞时呢? 我已经search了一下(也许还不够,谁知道?),并不知道如何判断对方何时使用非阻塞套接字来closures连接。 似乎没有方法或属性告诉我们这一点,比较recv()的返回值与空string似乎是绝对无用的…是只有我有这个问题? 作为一个简单的例子,假设我的套接字的超时设置为1.2342342(无论你在这里是否定的非负数)秒,我打电话给socket.recv(1024) ,但另一方在1.2342342秒期间不发送任何东西。 recv()调用将返回一个空string,我不知道连接是否仍然存在或没有线索…

非阻塞读取python中的subprocess.PIPE

我正在使用subprocess模块来启动一个subprocess并连接到它的输出stream(标准输出)。 我想能够在其stdout上执行非阻塞读取。 有没有办法让.readline非阻塞或在我调用.readline之前检查stream中是否有数据? 我希望这是可移植的,或者至less在Windows和Linux下工作。 这里是我现在是怎么做的(如果没有数据可用,它会阻止在.readline ): p = subprocess.Popen('myprogram.exe', stdout = subprocess.PIPE) output_str = p.stdout.readline()