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:
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:
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:
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':
print['letter :', letter]
for letter in 'freeCodeCamp':
print['letter :', letter]
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:
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:
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.
for letter in 'freeCodeCamp':
print['letter :', letter]
for letter in 'freeCodeCamp':
if letter == "o":
break
print['letter :', letter]
for letter in 'freeCodeCamp':
if letter == "o":
break
print['letter :', letter]
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.