【发布时间】:2013-11-10 14:18:28
【问题描述】:
我正在尝试在 python 中编写一个程序,该程序通过父函数将 2 个整数写入管道,然后通过子函数读取这些相同的整数。然后子函数应该打印出两者的乘积。
问题是,当我运行它时,它会像预期的那样等待 5 秒,然后返回值 441 而不是 2。
希望有人可以帮助弄清楚如何修复此代码:)
import os,time
def child(pipein):
while True:
num1 = int(os.read(pipein,32))
num2 = int(os.read(pipein,32))
r=(num1)*(num2)
print(r)
os._exit(0)
def parent():
pipein,pipeout = os.pipe()
x=5
if os.fork()==0:
child(pipein)
else:
while True:
num1=str(2)
num2=str(1)
line=os.write(pipeout,num1.encode())
line=os.write(pipeout,num2.encode())
time.sleep(x)
parent()
【问题讨论】:
-
如果您希望有人帮助您,您需要减少问题。您应该尝试解释它是如何不工作的,您期望它的行为方式以及您的推理原因。您仍然可能会得到答案,但线程问题非常重要,并且期望有人为您完成繁重的工作不会让您受到这个社区的喜爱。
-
您的新版本在第一对
reads 之后退出子版本,因此在打印第一个值后它将永远阻塞。