Tôi có một quy trình Python để sinh ra 5 quy trình Python khác bằng cách sử dụng mô-đun đa xử lý. Hãy gọi quá trình cha mẹ P0 và những người khác P1-P5. Yêu cầu là, nếu chúng ta gửi một SIGTERM đến P0, nó sẽ đóng P1 đến P5 trước và sau đó thoát ra khỏi chính nó.Làm thế nào để một quá trình python thoát ra một cách duyên dáng sau khi nhận được SIGTERM trong khi chờ đợi trên một semaphore?
Bắt là P1 và P5 đang chờ trên semaphores. Vì vậy, khi tôi gửi SIGTERM cho các quá trình này, chúng gọi trình xử lý tín hiệu và thoát. Nhưng vì họ đang chờ đợi trên semaphore, họ ném một ngoại lệ. Có cách nào để nắm bắt ngoại lệ đó trước khi thoát, để P0 đến P5 có thể thực hiện một lối thoát duyên dáng?
Traceback:
Traceback (most recent call last):
File "/usr/lib64/python2.7/multiprocessing/process.py", line 258, in _bootstrap
Traceback (most recent call last):
Process Process-2:
File "/usr/lib64/python2.7/multiprocessing/process.py", line 258, in _bootstrap
Traceback (most recent call last):
self.run()
File "/usr/lib64/python2.7/multiprocessing/process.py", line 114, in run
self._target(*self._args, **self._kwargs)
Process Process-5:
Traceback (most recent call last):
File "/usr/lib64/python2.7/multiprocessing/process.py", line 258, in _bootstrap
self.run()
File "/usr/lib64/python2.7/multiprocessing/process.py", line 114, in run
self._target(*self._args, **self._kwargs)
File "/opt/fireeye/scripts/mip/StaticAnalysisRunner.py", line 45, in run
qsem.acquire()
Bạn đang sử dụng phiên bản Python nào? Cuộc gọi cụ thể nào P1 và P5 thực sự khiến họ chờ đợi trên semaphore? Bạn có thể bao gồm các tracebacks? – dano
Một mẫu mã tối thiểu tái tạo vấn đề của bạn sẽ rất tuyệt. –
Tôi đang sử dụng Python 2.7.8 P1 đến P5 đang cố gắng truy cập vào hàng đợi được chia sẻ qua các quy trình và quyền truy cập vào hàng đợi được bảo vệ bằng semaphore.Một cái gì đó như thế này: sem.acquire() item = q.get() sem.release() –