我想知道是否有可能檢查每個進程需要多長時間。例如,
例如,有四名工人,工作時間不應超過10秒,但其中一名工人需要超過10秒鐘。在10秒鐘之後和完成工作之前,有辦法提醒警報。
我最初的想法是使用經理,但似乎我要等到過程結束。
非常感謝。Python多處理 - 檢查每個進程的狀態
1
A
回答
2
我已經發現這個解決方案的時間前(某處在StackOverflow這裏),我很滿意它。
基本上,它使用signal來引發異常,如果一個進程超過預期。
所有你需要做的就是這個類添加到您的代碼:
import signal
class timeout:
def __init__(self, seconds=1, error_message='TimeoutError'):
self.seconds = seconds
self.error_message = error_message
def handle_timeout(self, signum, frame):
raise TimeoutError(self.error_message)
def __enter__(self):
signal.signal(signal.SIGALRM, self.handle_timeout)
signal.alarm(self.seconds)
def __exit__(self, type, value, traceback):
signal.alarm(0)
這裏是它如何工作的一個普通的例子:
import time
with timeout(seconds=3, error_message='JobX took too much time'):
try:
time.sleep(10) #your job
except TimeoutError as e:
print(e)
在你的情況,我想補充的並對工作人員需要執行的工作做出聲明。然後你抓住例外,你做你認爲最好的。
或者,你可以定期檢查,如果一個進程是活的:
timeout = 3 #seconds
start = time.time()
while time.time() - start < timeout:
if any(proces.is_alive() for proces in processes):
time.sleep(1)
else:
print('All processes done')
else:
print("Timeout!")
# do something
+0
在我看來,你的上下文管理功能會改變工作者的功能。它是好的,但我的期望是不觸及工作者的功能。 – galaxyan
+0
儘管您需要在with語句下縮進工作器函數,但它不會根據工作原理更改工作器函數。我沒有看到這樣做有什麼特別的問題,也許在你的情況下是不同的,如果你發佈你的實際功能,我可以嘗試使用'timeout'來實現它的工作實現。 –
0
您可以檢查進程是否還活着,你想加入之後。不要忘記設置超時時間,否則會等到作業完成。
這裏是你
from multiprocessing import Process
import time
def task():
import time
time.sleep(5)
procs = []
for x in range(2):
proc = Process(target=task)
procs.append(proc)
proc.start()
time.sleep(2)
for proc in procs:
proc.join(timeout=0)
if proc.is_alive():
print "Job is not finished!"
相關問題
- 1. 從Python中檢查進程狀態
- 2. 檢查進程狀態
- 3. 使用Python多重處理模塊跨多個進程共享狀態
- 4. 工人的python多處理狀態
- 5. python多處理每個都有自己的子進程(Kubuntu,Mac)
- 6. Python中的多處理,每個進程處理文件的一部分
- 7. Python多處理進程號
- 8. 檢查Ansible進程的狀態
- 9. 狀態混合多處理和在Python
- 10. Python多進程處理進程名稱
- 11. Python異步代理狀態檢查
- 12. 檢查分叉進程的狀態?
- 13. Python中的錯誤處理,可以檢測程序狀態
- 14. Python:如何檢查sendline執行的進程的狀態
- 15. Python多處理。與許多進程池
- 16. 只需檢查c狀態進程
- 17. 在Perl中檢查子進程狀態
- 18. 處理每個應用程序狀態的GUI元素屬性
- 19. python:通過ID檢查線程狀態
- 20. 如何檢查進程是否處於掛起狀態(Linux)
- 21. 檢查多個UISwitches的狀態
- 22. 在C++類中處理多個狀態
- 23. 在Rails中處理多個狀態
- 24. 檢查HTTP狀態(Python)
- 25. Python檢查Win狀態
- 26. 狀態處理的多態引用
- 27. 如何檢查狀態或使用python殺死外部進程
- 28. SpiceService具有每個請求的網絡狀態檢查程序
- 29. 如何在Python多重處理中動態創建每進程隊列
- 30. C99 fesetround()/ fegetround()狀態是每個線程還是每個進程?
UNIX或Windows簡單的例子? –
@alec_djinn Unix – galaxyan