我希望有一个进程持续监视RPi输入,并将一个变量(我选择了一个队列)设置为True或False以反映去抖动值。然后另一个进程将捕获图像(从流)。我写了一些代码只是为了检查我是否可以让多处理和信令(队列)正常工作(我是一个真正的编码器…)。在
这一切都很好地与线程,但多处理是一个奇怪的错误。特别是“多处理,EOFError:读取行时的EOF”。代码输出:-在
this computer has the following number of CPU's 6
OK, started thread on separate processor, now we monitor variable
enter something, True is the key word:
Process Process-1:
Traceback (most recent call last):
File "c:\Python34\lib\multiprocessing\process.py", line 254, in _bootstrap
self.run()
File "c:\Python34\lib\multiprocessing\process.py", line 93, in run
self._target(*self._args, **self._kwargs)
File "C:\Users\Peter\Documents\NetBeansProjects\test_area\src\test4.py", line 16, in Wait4InputIsTrue
ValueIs = input("enter something, True is the key word: ")
EOFError: EOF when reading a line
#test5.py
if __name__ == "__main__":
from multiprocessing import Process, Queue, Lock, cpu_count
from time import sleep
from test4 import Wait4InputIsTrue
print("this computer has the following number of CPU's", cpu_count())
LockIt = Lock()
IsItTrue = Queue(maxsize = 3)
Wait4 = Process(target = Wait4InputIsTrue, args = (IsItTrue, LockIt))
Wait4.start()
print("OK, started thread on separate processor, now we monitor variable")
while True:
if IsItTrue.qsize():
sleep(0.1)
print("received input from separate thread:", IsItTrue.get())
请注意,我尝试在test4.py中的input语句中添加try:在这种情况下,它会一直打印“entersomething,True是关键字:”infinitely,withouta cr
我在狂野中加了锁试图修复它,没什么区别
有人知道为什么会这样吗?在
你的问题可以归结为一个简单的脚本:
当运行时,它产生
^{2}$读取零字节意味着管道关闭,
input(..)
将其转换为EOFError
异常。在multiprocessing
模块不允许您读取stdin
。这通常是有意义的,因为混合来自多个孩子的stdin
读者是一件危险的事情。实际上,深入研究实现,multiprocessing/process.py
显式地将stdin
设置为devnull
:如果您只是使用
stdin
进行测试,那么解决方案很简单:不要这样做!如果你真的需要用户的输入,生活就要困难得多。您可以在父级中使用其他队列和代码来提示用户并获取输入。在相关问题 更多 >
编程相关推荐