简体   繁体   中英

How to kill the process after particular timeout in python?

I am having a python function that has loop which may fall into infinte loop. I want to kill the function and print error if it exceeds the time limit let's say 10 sec.

For eg. this is the function that contains infinite loop

def myfunc(data):
    while True:
        data[0]+=10
    return data
data=[57,6,879,79,79,]

On calling from here

print(myfunc(data))

I want it to completely kill the process and print the message. I am working on windows.

Any reference or resource will be helpful.

Thanks

Maybe you can try with func-timeout Python package.

You can install it with the following command:

pip install func-timeout

This code will resolve your problem "I want to kill the function and print error if it exceeds the time limit let's say 10 sec."

from time import process_time as timer

def whatever(function):
    start = timer()
    infinite loop here:
        end = timer()
    (your code here)
        if end >= 10:
            print(whatever)
            return

Breakdown: there are a few options for doing this with the time module
At the start of your program import the method
At the beginning of your (infinite loop) start = timer() will call process_time and save the value as start.

end = timer() will continue to send the call to process_time storing new value
put w/e code you want in your loop
if end >= 10: will keep checking the count each loop iteration
print(whatever)
return will automatically terminate the function by escaping if time runs 10 seconds when it is checked next loop.

This doesn't say "how to stop the process_time" from running once its called idk if it continues to run in the background and you have to stop it on your on. But this should answer your question. And you can investigate a bit further with what I've given you.
note: This is not designed to generate "precision" timing for that a more complex method will need to be found

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM