Scott Mermelstein의 충고는 훌륭합니다. 프로세스 간 의사 소통을 살펴 보시기 바랍니다. 그러나 당신이 시작하는 간단한 예로서,이 같은 코드를 수정 제안 :
import threading
import queue
import sys
import time
class receiveTemp (threading.Thread):
def __init__(self, out, stop, q):
threading.Thread.__init__(self)
self.out = out
self.q = q
self.stop = stop
def run(self):
while not self.stop.is_set():
try:
cmd = self.q.get(timeout=1)
except queue.Empty:
continue
try:
rec = send(cmd)
self.out.write(rec)
except BaseException as Error:
print(Error)
pass
stop = threading.Event()
q = queue.Queue()
rt = receiveTemp(sys.stdout, stop, q)
rt.start()
# Everything below here is an example of how this could be used.
# Replace with your own code.
time.sleep(1)
# Send commands using put.
q.put('command0')
q.put('command1')
q.put('command2')
time.sleep(3)
q.put('command3')
time.sleep(2)
q.put('command4')
time.sleep(1)
# Tell the thread to stop by asserting the event.
stop.set()
rt.join()
print('Done')
이 코드는 중지해야 스레드에 신호로 threading.Event
을 사용합니다. 그런 다음 외부에서 스레드에 명령을 보내는 방법으로 queue.Queue
을 사용합니다. 스레드 외부에서 대기열에 명령을 추가하려면 q.put(command)
을 사용해야합니다.
나는 이것을 Arduino로 테스트하지 않았고, 명령을 반환 한 테스트 용으로 내 자신의 버전 send
을 만들었습니다.
"Interprocess Communications"라는 버즈 문구를 찾고 계십니다. 그것이 파이썬의 내부 구조에 기초를두기 때문에 그것이 C로 어떻게 수행되는지 연구하십시오. 다른 옵션들 중에는 소켓, 파이프, 공유 메모리 또는 가능한 경우 (송신하려는 내용이 충분히 제한적일 경우) 신호 처리기를 사용하여 수행 할 수 있습니다. –
Pyro4를 사용하여 "서버에서 실행되는 트레드"를 얻는 데 문제가 있습니까? Pyro4 데몬의 requestloop을 시작하자마자 작업 스레드의 요청을 처리하는 서버 프로세스가 실행됩니다. –