2 回答

TA貢獻1807條經(jīng)驗 獲得超9個贊
您可以使用time.perf_counter,您的代碼將看到:
import time
ProcessTime = time.perf_counter #this returns nearly 0 when first call it if python version <= 3.6
ProcessTime()
def longfunc(arg, timeout):
start = ProcessTime()
while True
# Do anything
delta = start + timeout - ProcessTime()
if delta > 0:
sleep(1)
else:
return #Error or False
您可以更改 While 對于每個任務(wù)的 for 循環(huán),檢查超時

TA貢獻1795條經(jīng)驗 獲得超7個贊
如果你正在應(yīng)用 multiprocessing 那么你必須簡單地應(yīng)用p.join(timeout=5)where p in a process 這是一個簡單的例子
import time
from itertools import count
from multiprocessing import Process
def inc_forever():
print('Starting function inc_forever()...')
while True:
time.sleep(1)
print(next(counter))
def return_zero():
print('Starting function return_zero()...')
return 0
if __name__ == '__main__':
# counter is an infinite iterator
counter = count(0)
p1 = Process(target=inc_forever, name='Process_inc_forever')
p2 = Process(target=return_zero, name='Process_return_zero')
p1.start()
p2.start()
p1.join(timeout=5)
p2.join(timeout=5)
p1.terminate()
p2.terminate()
if p1.exitcode is None:
print(f'Oops, {p1} timeouts!')
if p2.exitcode == 0:
print(f'{p2} is luck and finishes in 5 seconds!')
我想這可能對你有幫助
添加回答
舉報