Hướng dẫn python skip if taking too long - python bỏ qua nếu mất quá nhiều thời gian

Khi bạn gọi một hàm trong cùng một luồng, thông thường nó sẽ không trả lại cho đến khi hoàn thành. Chức năng bạn gọi thực sự phải được thiết kế để bị gián đoạn ngay từ đầu. Có nhiều cách để đạt được điều này, với mức độ phức tạp và tổng quát khác nhau.

Có lẽ cách đơn giản nhất là vượt qua giới hạn thời gian cho chức năng của bạn và xử lý công việc trong các khối nhỏ. Sau khi mỗi khối được xử lý, hãy kiểm tra xem thời gian trôi qua có vượt quá thời gian chờ không và nếu vậy, bảo lãnh sớm.

Ví dụ sau đây minh họa ý tưởng này, với công việc mất một lượng thời gian ngẫu nhiên cho mỗi khối mà đôi khi sẽ hoàn thành và đôi khi hết thời gian:

import time
import random
import datetime

class TimeoutException(Exception):
    def __init__(self, *args, **kwargs):
        Exception.__init__(self, *args, **kwargs)

def busy_work():

    # Pretend to do something useful
    time.sleep(random.uniform(0.3, 0.6))

def train_loadbatch_from_lists(batch_size, timeout_sec):

    time_start = datetime.datetime.now()
    batch_xs = []
    batch_ys = []

    for i in range(0, batch_size+1):
        busy_work()
        batch_xs.append(i)
        batch_ys.append(i)

        time_elapsed = datetime.datetime.now() - time_start
        print 'Elapsed:', time_elapsed
        if time_elapsed > timeout_sec:
            raise TimeoutException()

    return batch_xs, batch_ys

def main():

    timeout_sec = datetime.timedelta(seconds=5)
    batch_size = 10
    try:
        print 'Processing batch'
        batch_xs, batch_ys = train_loadbatch_from_lists(batch_size, timeout_sec)
        print 'Completed successfully'
        print batch_xs, batch_ys
    except TimeoutException, e:
        print 'Timeout after processing N records'

if __name__ == '__main__':
    main()

Một cách khác để đạt được điều này là chạy chức năng công nhân trong một luồng riêng biệt và sử dụng Event để cho phép người gọi báo hiệu chức năng công nhân nên chấm dứt sớm.

Một số bài đăng (chẳng hạn như bài viết được liên kết ở trên) đề xuất sử dụng tín hiệu, nhưng không may các tín hiệu có thể gây ra các biến chứng bổ sung, và do đó không được khuyến nghị.

Hướng dẫn python skip if taking too long - python bỏ qua nếu mất quá nhiều thời gian

Nếu bạn cần bỏ qua một phần của vòng lặp hiện tại, bạn đang ở hoặc thoát ra khỏi vòng lặp hoàn toàn, thì bạn có thể sử dụng các câu lệnh ____10 và

for letter in 'freeCodeCamp':
    print('letter :', letter)
1.

Trong bài viết này, tôi sẽ đề cập đến cách sử dụng các câu lệnh ____10 và

for letter in 'freeCodeCamp':
    print('letter :', letter)
1 trong mã Python của bạn.

Cách sử dụng tuyên bố phá vỡ trong Python

Bạn có thể sử dụng câu lệnh

for letter in 'freeCodeCamp':
    print('letter :', letter)
0 nếu bạn cần thoát khỏi vòng lặp
for letter in 'freeCodeCamp':
    print('letter :', letter)
5 hoặc
for letter in 'freeCodeCamp':
    print('letter :', letter)
6 và chuyển sang phần mã tiếp theo.

Trong ví dụ đầu tiên này, chúng tôi có một vòng lặp lặp qua từng chữ cái của Freecodecamp.

for letter in 'freeCodeCamp':
    print('letter :', letter)

Đây là những gì được in vào bảng điều khiển:

Hướng dẫn python skip if taking too long - python bỏ qua nếu mất quá nhiều thời gian

Nếu chúng tôi muốn dừng vòng lặp của chúng tôi tại chữ cái "O", thì chúng tôi có thể sử dụng một câu lệnh

for letter in 'freeCodeCamp':
    print('letter :', letter)
7 theo sau là một câu lệnh
for letter in 'freeCodeCamp':
    print('letter :', letter)
0.

for letter in 'freeCodeCamp':
    if letter == "o":
        break
    print('letter :', letter)

Đây là những gì được in vào bảng điều khiển:

Hướng dẫn python skip if taking too long - python bỏ qua nếu mất quá nhiều thời gian

Nếu chúng tôi muốn dừng vòng lặp của chúng tôi tại chữ cái "O", thì chúng tôi có thể sử dụng một câu lệnh

for letter in 'freeCodeCamp':
    print('letter :', letter)
7 theo sau là một câu lệnh
for letter in 'freeCodeCamp':
    print('letter :', letter)
0.

num = 5
while num < 20:
    print('Current number :', num)
    num = num + 1

Đây là những gì được in vào bảng điều khiển:

Hướng dẫn python skip if taking too long - python bỏ qua nếu mất quá nhiều thời gian

Nếu chúng tôi muốn dừng vòng lặp của chúng tôi tại chữ cái "O", thì chúng tôi có thể sử dụng một câu lệnh

for letter in 'freeCodeCamp':
    print('letter :', letter)
7 theo sau là một câu lệnh
for letter in 'freeCodeCamp':
    print('letter :', letter)
0.

num = 5
while num < 20:
    print('Current number :', num)
    num = num + 1
    if num == 9:
        break

Đây là những gì được in vào bảng điều khiển:

Hướng dẫn python skip if taking too long - python bỏ qua nếu mất quá nhiều thời gian

Nếu chúng tôi muốn dừng vòng lặp của chúng tôi tại chữ cái "O", thì chúng tôi có thể sử dụng một câu lệnh for letter in 'freeCodeCamp': print('letter :', letter)7 theo sau là một câu lệnh for letter in 'freeCodeCamp': print('letter :', letter)0.

Trong ví dụ tiếp theo này, chúng tôi đang sử dụng vòng lặp

for letter in 'freeCodeCamp':
    print('letter :', letter)
6 để tăng
for letter in 'freeCodeCamp':
    if letter == "o":
        break
    print('letter :', letter)
0 miễn là
for letter in 'freeCodeCamp':
    if letter == "o":
        break
    print('letter :', letter)
0 nhỏ hơn 20.

Chúng tôi có thể thêm một điều kiện bên trong vòng

for letter in 'freeCodeCamp':
    print('letter :', letter)
6 của chúng tôi cho biết nếu
for letter in 'freeCodeCamp':
    if letter == "o":
        break
    print('letter :', letter)
0 là 9, thì thoát ra khỏi vòng lặp.

for letter in "Jessica":

Cách sử dụng tuyên bố tiếp tục trong Python

  if letter == "i":
        continue

Bạn có thể sử dụng câu lệnh

for letter in 'freeCodeCamp':
    print('letter :', letter)
1 nếu bạn cần bỏ qua lần lặp hiện tại của vòng
for letter in 'freeCodeCamp':
    print('letter :', letter)
5 hoặc
for letter in 'freeCodeCamp':
    print('letter :', letter)
6 và chuyển sang lần lặp tiếp theo.

for letter in "Jessica":
    if letter == "i":
        continue
    print(letter)

Đây là những gì được in vào bảng điều khiển:

Hướng dẫn python skip if taking too long - python bỏ qua nếu mất quá nhiều thời gian

Nếu chúng tôi muốn dừng vòng lặp của chúng tôi tại chữ cái "O", thì chúng tôi có thể sử dụng một câu lệnh

for letter in 'freeCodeCamp':
    print('letter :', letter)
7 theo sau là một câu lệnh
for letter in 'freeCodeCamp':
    print('letter :', letter)
0.

Trong ví dụ tiếp theo này, chúng tôi đang sử dụng vòng lặp

for letter in 'freeCodeCamp':
    print('letter :', letter)
6 để tăng
for letter in 'freeCodeCamp':
    if letter == "o":
        break
    print('letter :', letter)
0 miễn là
for letter in 'freeCodeCamp':
    if letter == "o":
        break
    print('letter :', letter)
0 nhỏ hơn 20.

num = 10
while num < 100:
    num = num + 10
    if num == 50:
        continue
    print("Current num: ", num)

Đây là những gì được in vào bảng điều khiển:

Hướng dẫn python skip if taking too long - python bỏ qua nếu mất quá nhiều thời gian

Nếu chúng tôi muốn dừng vòng lặp của chúng tôi tại chữ cái "O", thì chúng tôi có thể sử dụng một câu lệnh

for letter in 'freeCodeCamp':
    print('letter :', letter)
7 theo sau là một câu lệnh
for letter in 'freeCodeCamp':
    print('letter :', letter)
0.

Trong ví dụ tiếp theo này, chúng tôi đang sử dụng vòng lặp for letter in 'freeCodeCamp': print('letter :', letter)6 để tăng for letter in 'freeCodeCamp': if letter == "o": break print('letter :', letter)0 miễn là for letter in 'freeCodeCamp': if letter == "o": break print('letter :', letter)0 nhỏ hơn 20.

Chúng tôi có thể thêm một điều kiện bên trong vòng

for letter in 'freeCodeCamp':
    print('letter :', letter)
6 của chúng tôi cho biết nếu
for letter in 'freeCodeCamp':
    if letter == "o":
        break
    print('letter :', letter)
0 là 9, thì thoát ra khỏi vòng lặp.

Cách sử dụng tuyên bố tiếp tục trong Python

Bạn có thể sử dụng câu lệnh

for letter in 'freeCodeCamp':
    print('letter :', letter)
1 nếu bạn cần bỏ qua lần lặp hiện tại của vòng
for letter in 'freeCodeCamp':
    print('letter :', letter)
5 hoặc
for letter in 'freeCodeCamp':
    print('letter :', letter)
6 và chuyển sang lần lặp tiếp theo.

Trong ví dụ này, chúng tôi đang lặp qua một chuỗi tên của tôi.



Bên trong vòng lặp

for letter in 'freeCodeCamp':
    print('letter :', letter)
5, chúng tôi có một điều kiện cho biết nếu chữ cái là "Tôi" sau đó bỏ qua việc lặp đó và chuyển sang lần lặp tiếp theo.