프로세스를 RPi 입력을 지속적으로 모니터링하고, 디 바운스 된 값을 반영하기 위해 변수를 설정했습니다 (큐를 선택했습니다). 그러면 다른 프로세스가 스트림에서 이미지를 캡처합니다. 필자는 멀티 프로세싱과 시그널링 (queue)을 수행 할 수 있는지 확인하기 위해 몇 가지 코드를 작성했습니다. (나는 성숙한 코더입니다 ...).파이썬 3 : 멀티 프로세싱, EOFError : 라인을 읽을 때의 EOF
모두 스레드와 함께 제대로 작동하지만 멀티 프로세싱은 이상한 오류가 발생합니다. 특히 '다중 처리, 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
이 모듈은 '포트'(I는 입력으로 키보드를 사용하고 있습니다) 모니터 :이 모듈은 상태를 모니터링
#test4.py
from time import sleep
from multiprocessing import Lock
def Wait4InputIsTrue(TheVar, TheLock):
while True:
sleep(0.2)
TheLock.acquire()
#try:
ValueIs = input("enter something, True is the key word: ")
#except:
# ValueIs = False
if ValueIs == "True":
TheVar.put(True)
print("changed TheVar to True")
TheLock.release()
을, 그리고에 작용 :
#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())
참고 : try :를 test4.py의 입력문에 추가하려고 시도했음을 유의하십시오.이 경우 "crash없이 무언가를 입력하고 True가 핵심어입니다."라는 인쇄가 계속됩니다.
나는, 그것을 해결하기 위해 야생 시도 잠금을 추가 차이누구나 이런 일이 왜 어떤 생각을하지 않는다?