Menjalankan beberapa thread - AWS Panorama

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Menjalankan beberapa thread

Anda dapat menjalankan logika aplikasi Anda pada thread pengolahan dan menggunakan thread lain untuk proses latar belakang lainnya. Misalnya, Anda dapat membuat threadmelayani lalu lintas HTTPuntuk debugging, atau thread yang memantau hasil inferensi dan mengirimkan data keAWS.

Untuk menjalankan beberapa thread, Anda menggunakanmodul threadingdari pustaka standar Python untuk membuat thread untuk setiap proses. Contoh berikut menunjukkan loop utama dari aplikasi sampel server debug, yang menciptakan objek aplikasi dan menggunakannya untuk menjalankantigautas.

contoh Paket/123456789012-debug_server-1.0/application.py- Loop Utama
def main(): panorama = panoramasdk.node() while True: try: # Instantiate application logger.info('INITIALIZING APPLICATION') app = Application(panorama) # Create threads for stream processing, debugger, and client app.run_thread = threading.Thread(target=app.run_cv) app.server_thread = threading.Thread(target=app.run_debugger) app.client_thread = threading.Thread(target=app.run_client) # Start threads logger.info('RUNNING APPLICATION') app.run_thread.start() logger.info('RUNNING SERVER') app.server_thread.start() logger.info('RUNNING CLIENT') app.client_thread.start() # Wait for threads to exit app.run_thread.join() app.server_thread.join() app.client_thread.join() logger.info('RESTARTING APPLICATION') except: logger.exception('Exception during processing loop.')

Ketika semua thread keluar, aplikasi restart sendiri. Parameterrun_cvloop memproses gambar dari aliran kamera. Jika menerima sinyal untuk berhenti, itu mematikan proses debugger, yang menjalankan server HTTP dan tidak dapat mematikan dirinya sendiri. Setiap utas harus menangani kesalahannya sendiri. Jika kesalahan tidak tertangkap dan dicatat, thread keluar diam-diam.

contoh Paket/123456789012-debug_server-1.0/application.py- Loop pemrosesan
# Processing loop def run_cv(self): """Run computer vision workflow in a loop.""" logger.info("PROCESSING STREAMS") while not self.terminate: try: self.process_streams() # turn off debug logging after 15 loops if logger.getEffectiveLevel() == logging.DEBUG and self.frame_num == 15: logger.setLevel(logging.INFO) except: logger.exception('Exception on processing thread.') # Stop signal received logger.info("SHUTTING DOWN SERVER") self.server.shutdown() self.server.server_close() logger.info("EXITING RUN THREAD")

Thread berkomunikasi melalui aplikasiselfobjek. Untuk me-restart loop pemrosesan aplikasi, thread debugger memanggilstopmetode. Metode ini menetapkanterminateatribut, yang sinyal benang lain untuk menutup.

contoh Paket/123456789012-debug_server-1.0/application.py- Metode stop
# Interrupt processing loop def stop(self): """Signal application to stop processing.""" logger.info("STOPPING APPLICATION") # Signal processes to stop self.terminate = True # HTTP debug server def run_debugger(self): """Process debug commands from local network.""" class ServerHandler(SimpleHTTPRequestHandler): # Store reference to application application = self # Get status def do_GET(self): """Process GET requests.""" logger.info('Get request to {}'.format(self.path)) if self.path == "/status": self.send_200('OK') else: self.send_error(400) # Restart application def do_POST(self): """Process POST requests.""" logger.info('Post request to {}'.format(self.path)) if self.path == '/restart': self.send_200('OK') ServerHandler.application.stop() else: self.send_error(400)