上周我也发布了类似的question,这篇文章反映了我的审判和我现在面临的问题。在
通过Popen调用的程序是一个命令行程序。我使用一个线程从队列中读取一个项并将其发送到stdin并从stdout获取响应。但是它挂在proc.stdout.read()
中。上周五,我确实看到了它与预期产量的良好配合,然后当我今天做了一些更改时,它挂起了。我所做的更改是将read()
替换为readlines()
,并使用一个循环来迭代结果。我知道readlines()
可能会阻塞,但是当我上周五将代码反转到使用read()
时,它也会阻塞。我现在完全迷路了。有什么原因吗?在
下面是从队列中获取一个句子并将其输入java程序以获得响应的代码:
''' below is the code for worker thread. '''
def readQueue(proc, queue):
print 'enter queueThread.\n'
global notEmpty
notEmpty = True
while notEmpty:
try:
sen = queue.get()
proc.stdin.write(sen.strip())
res = proc.stdout.read()
print res.strip(), ' ', sen
queue.task_done()
except Empty:
break
print 'leave queueThread.'
下面的主线程是从文件中读取每一行,并将其放入队列中,以便工作线程逐项处理:
^{pr2}$
子进程中的管道是类似文件的对象。在
这些对象上的方法
read()
会将所有内容读入内存,直到达到EOF为止。如果不指定应该读多少,请参阅doc:https://docs.python.org/2/library/stdtypes.html#file.read。在如果你不想看到这样的行为,你必须设置你想读的大小。试着把它设置成1字节?在
readlines()
也是如此,请参阅文档:https://docs.python.org/2/library/stdtypes.html#file.readlines相关问题 更多 >
编程相关推荐