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ị.
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à
1.for letter in 'freeCodeCamp':
print['letter :', letter]
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:
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:
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 = 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:
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.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:
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.
for letter in "Jessica":
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. if letter == "i":
continue
Đây là những gì mã trông giống như tất cả cùng nhau:
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:
Bạn nên nhận thấy rằng chữ "Tôi" không được in vào bảng điều khiển và câu lệnh
for letter in 'freeCodeCamp':
print['letter :', letter]
1 đã bỏ qua lần lặp đó.Trong ví dụ tiếp theo này, chúng tôi sẽ in các số theo mức tăng 10 bằng cách sử dụng vòng lặp
for letter in 'freeCodeCamp':
print['letter :', letter]
6. Chúng tôi sẽ thêm một điều kiện trong vòng lặp cho biết nếu số là 50, thì hãy bỏ qua việc lặp đó và di chuyển sang cái tiếp theo.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:
Như bạn có thể thấy, số 50 không được in vào bảng điều khiển vì câu lệnh
for letter in 'freeCodeCamp':
print['letter :', letter]
1 bên trong câu lệnh for letter in 'freeCodeCamp':
print['letter :', letter]
7.Sự kết luận
Các câu lệnh
for letter in 'freeCodeCamp':
print['letter :', letter]
0 và for letter in 'freeCodeCamp':
print['letter :', letter]
1 trong Python được sử dụng để bỏ qua các phần của vòng lặp hiện tại hoặc thoát ra khỏi vòng lặp hoàn toàn.Câu lệnh
for letter in 'freeCodeCamp':
print['letter :', letter]
0 có thể được sử dụng 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à di chuyển sang phần mã tiếp theo.Câu lệnh
for letter in 'freeCodeCamp':
print['letter :', letter]
1 có thể được sử dụng 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à di chuyển sang lần lặp tiếp theo.Tôi hy vọng bạn thích bài viết này và may mắn nhất trên hành trình Python của bạn.
Học mã miễn phí. Chương trình giảng dạy nguồn mở của Freecodecamp đã giúp hơn 40.000 người có được việc làm với tư cách là nhà phát triển. Bắt đầu