Hướng dẫn python background thread - chủ đề nền python

Given this code snippet:

import time

if __name__ == "__main__":
    list = []
    counter = 0
    while True:
        counter = counter + 1
        time.sleep(0.0033)
        list.append(counter)

I would like to create a thread which runs in the background doing some metadata calculations (finding the sum of the elements in the array) on the array "list" being populated in real time in the while loop.

asked Mar 12, 2018 at 1:47Mar 12, 2018 at 1:47

Hướng dẫn python background thread - chủ đề nền python

1

import time
import threading


if __name__ == "__main__":

    def print_sum(l):
        while True:
            total = sum(l)
            print("the total is {}".format(total))
            time.sleep(1)


    #list = [] - should not use 'list'. - this shadows the built in object name list.
    l = []
    counter = 0
    thread = threading.Thread(target=print_sum,args=(l,))
    thread.daemon = True
    thread.start()
    while True:
        counter = counter + 1
        l.append(counter)
        time.sleep(1)

This spins up a thread in the background running function print_sum to display the sum of the list.

answered Mar 12, 2018 at 2:30Mar 12, 2018 at 2:30

Hướng dẫn python background thread - chủ đề nền python

1

Bạn có thể duyên dáng dừng một luồng daemon bằng cách sử dụng một luồng.Event.stop a daemon thread using a threading.Event.stop a daemon thread using a threading.Event.

Nội dung chính ShowShow

  • Cách dừng một chủ đề daemon
  • Ví dụ về chủ đề daemon dừng đột ngột
  • Ví dụ về việc dừng một sợi daemon
  • Ví dụ về việc dừng một daemon ở lối ra
  • & nbsp; & nbsp; & nbsp; & nbsp; in ('hoàn thành nền'))
  • Nhiệm vụ nền chạy cứ sau hai giây như trước, kiểm tra trạng thái của sự kiện mỗi lần lặp.

Các luồng chính trong mười giây sau đó chấm dứt.

Ngay trước khi quá trình Python bị chấm dứt, hàm stop_background () của chúng tôi được gọi. Hàm này đặt sự kiện và tham gia phiên bản luồng, chờ nó chấm dứt.Ask your questions in the comments below and I will do my best to answer.

  • Các luồng nền thông báo rằng sự kiện được đặt, thoát khỏi vòng lặp của nó và chấm dứt.
  • Cách dừng một chủ đề daemon
  • Ví dụ về chủ đề daemon dừng đột ngột
  • Ví dụ về việc dừng một sợi daemon
  • Ví dụ về việc dừng một daemon ở lối ra
  • Trong hướng dẫn này, bạn sẽ khám phá cách dừng các tác vụ nền của Daemon trong Python.
  • Bắt đầu nào.

Cần dừng một chủ đề daemon

Đọc thêm

Takeaways

Một chủ đề là một chủ đề thực thi trong một chương trình máy tính.threading.Thread class.

Mỗi chương trình Python có ít nhất một luồng thực thi được gọi là luồng chính. Cả hai quy trình và luồng được tạo và quản lý bởi hệ điều hành cơ bản.

  • Đôi khi chúng ta có thể cần tạo các luồng bổ sung trong chương trình của chúng tôi để thực thi mã đồng thời.

Python cung cấp khả năng tạo và quản lý các luồng mới thông qua mô -đun luồng và lớp luồng.threading.Thread class.

Bạn có thể tìm hiểu thêm về các chủ đề Python trong hướng dẫn:

Chủ đề trong Python: Hướng dẫn hoàn chỉnh

Cách dừng một chủ đề daemon

Ví dụ về chủ đề daemon dừng đột ngột

Ví dụ về việc dừng một sợi daemon

Ví dụ về việc dừng một daemon ở lối ra

Trong hướng dẫn này, bạn sẽ khám phá cách dừng các tác vụ nền của Daemon trong Python.

Bắt đầu nào.

  • Một chủ đề là một chủ đề thực thi trong một chương trình máy tính.

Mỗi chương trình Python có ít nhất một luồng thực thi được gọi là luồng chính. Cả hai quy trình và luồng được tạo và quản lý bởi hệ điều hành cơ bản.

Đôi khi chúng ta có thể cần tạo các luồng bổ sung trong chương trình của chúng tôi để thực thi mã đồng thời.threading.Thread instance can be configured to be a daemon thread.threading.Thread instance can be configured to be a daemon thread.

Python cung cấp khả năng tạo và quản lý các luồng mới thông qua mô -đun luồng và lớp luồng.daemon” argument to True in the constructor of the threading.Thread class.daemon” argument to True in the constructor of the threading.Thread class.

Bạn có thể tìm hiểu thêm về các chủ đề Python trong hướng dẫn:

Chủ đề trong Python: Hướng dẫn hoàn chỉnh....

Trong lập trình đồng thời, chúng ta có thể cần phải chạy một tác vụ trong nền bằng cách sử dụng luồng daemon.

thread=Thread(daemon=True,...)=Thread(daemon=True,...)=Thread(daemon=True,...)

Vấn đề với các luồng daemon là chúng sẽ bị chấm dứt đột ngột bởi quá trình Python một khi tất cả các luồng không phải là Daemon khác được hoàn thành. Điều này có thể gây ra vấn đề cho một số nhiệm vụ nền có thể cần đóng và phát hành tài nguyên trước khi bị đóng.

Làm thế nào chúng ta có thể duyên dáng ngăn chặn một chủ đề daemon trong Python?

Một luồng daemon có thể được dừng lại một cách duyên dáng bằng cách sử dụng một luồng.Event.

Một chủ đề daemon là một luồng nền. Daemon được phát âm là Dee Dee-Mon, giống như cách đánh vần thay thế của Demon Demon.

Một luồng có thể được cấu hình là trình nền hay không, và hầu hết các luồng trong lập trình đồng thời, bao gồm cả luồng chính, là các luồng không phải là Daemon (không phải các luồng nền) theo mặc định. Sự khác biệt giữa các luồng daemon và các luồng không phải là Daemon là quá trình sẽ thoát nếu chỉ chạy các luồng daemon, trong khi nó không thể thoát nếu ít nhất một luồng không phải là Daemon đang chạy.task():task():

Do đó, các luồng Daemon rất hữu ích để thực hiện các tác vụ trong nền để hỗ trợ các luồng không phải là Daemon trong một ứng dụng.# run forever# run forever

    whileTrue:whileTrue:whileTrue:

Nếu bạn chưa quen với chủ đề daemon, bạn có thể tìm hiểu thêm về chúng ở đây:# run every 2 seconds# run every 2 seconds

        sleep(2)sleep(2)sleep(2)

Cách sử dụng các chủ đề daemon trong Python# perform task...# perform task...

Điều quan trọng, các chủ đề daemon bị chấm dứt đột ngột sau khi tất cả các luồng không daemon kết thúc. Điều này có nghĩa là bất kỳ nhiệm vụ nền nào chạy trong một luồng daemon sẽ không có cơ hội đóng tài nguyên và dừng lại một cách duyên dáng.

Một luồng python. Phục âm có thể được cấu hình là một luồng daemon.

Chúng ta có thể định cấu hình một luồng mới để trở thành một luồng daemon bằng cách chỉ định đối số daemon của người Hồi giáo thành True trong hàm tạo của lớp luồng.threading.Event is a thread-safe boolean flag that can be shared between threads.threading.Event is a thread-safe boolean flag that can be shared between threads.

Ví dụ:

  • ...

# Tạo một chuỗi daemon mới

Bạn có thể tìm hiểu thêm về các chủ đề Python trong hướng dẫn:

Chủ đề trong Python: Hướng dẫn hoàn chỉnh....

Trong lập trình đồng thời, chúng ta có thể cần phải chạy một tác vụ trong nền bằng cách sử dụng luồng daemon.

ifevent.is_set():event.is_set():event.is_set():

return

Vấn đề với các luồng daemon là chúng sẽ bị chấm dứt đột ngột bởi quá trình Python một khi tất cả các luồng không phải là Daemon khác được hoàn thành. Điều này có thể gây ra vấn đề cho một số nhiệm vụ nền có thể cần đóng và phát hành tài nguyên trước khi bị đóng.

Bạn có thể tìm hiểu thêm về các chủ đề Python trong hướng dẫn:

Chủ đề trong Python: Hướng dẫn hoàn chỉnh....

Trong lập trình đồng thời, chúng ta có thể cần phải chạy một tác vụ trong nền bằng cách sử dụng luồng daemon.

whilenotevent.is_set():notevent.is_set():notevent.is_set():

Vấn đề với các luồng daemon là chúng sẽ bị chấm dứt đột ngột bởi quá trình Python một khi tất cả các luồng không phải là Daemon khác được hoàn thành. Điều này có thể gây ra vấn đề cho một số nhiệm vụ nền có thể cần đóng và phát hành tài nguyên trước khi bị đóng.# run every 2 seconds

    sleep(2)sleep(2)sleep(2)

Làm thế nào chúng ta có thể duyên dáng ngăn chặn một chủ đề daemon trong Python?# perform task...

Một luồng daemon có thể được dừng lại một cách duyên dáng bằng cách sử dụng một luồng.Event.threading.Thread object until the background task has terminated.

Bạn có thể tìm hiểu thêm về các chủ đề Python trong hướng dẫn:

Chủ đề trong Python: Hướng dẫn hoàn chỉnh....

Trong lập trình đồng thời, chúng ta có thể cần phải chạy một tác vụ trong nền bằng cách sử dụng luồng daemon.

stop_event.set().set().set()

Vấn đề với các luồng daemon là chúng sẽ bị chấm dứt đột ngột bởi quá trình Python một khi tất cả các luồng không phải là Daemon khác được hoàn thành. Điều này có thể gây ra vấn đề cho một số nhiệm vụ nền có thể cần đóng và phát hành tài nguyên trước khi bị đóng.

thread.join().join().join()

Làm thế nào chúng ta có thể duyên dáng ngăn chặn một chủ đề daemon trong Python?

  • Cách tham gia một chủ đề trong Python

Quá trình dừng luồng daemon này có thể được tự động bằng mô -đun ATEXIT.atexit module.atexit module.

Mô -đun ATEXIT cho phép một hàm được đăng ký sẽ được gọi bởi trình thông dịch Python ngay trước khi quá trình được thoát.

Một chức năng mới có thể được xác định sẽ thực hiện hành động này cho chúng tôi, thiết lập sự kiện và tham gia phiên bản luồng nền.

Hàm có thể lấy luồng.Event và rening.threading.Event and threading.Thread instances as arguments.threading.Event and threading.Thread instances as arguments.

Ví dụ:

# Dừng nhiệm vụ nền một cách duyên dáng trước khi thoát

def stop_background (stop_event, chủ đề):stop_background(stop_event,thread):stop_background(stop_event,thread):

& nbsp; & nbsp; & nbsp; & nbsp;# yêu cầu điểm dừng nền# request the background thread stop# request the background thread stop

    stop_event.set()stop_event.set()stop_event.set()

& nbsp; & nbsp; & nbsp; & nbsp;# chờ luồng nền dừng lại# wait for the background thread to stop# wait for the background thread to stop

    thread.join()thread.join()thread.join()

Chức năng stop_background () của chúng tôi sau đó có thể được đăng ký với mô -đun ATEXIT, ví dụ:stop_background() function can then be registered with the atexit module, for example:stop_background() function can then be registered with the atexit module, for example:

.......

# Đăng ký AT Lối ra

atexit.register(stop_background,stop_event,thread).register(stop_background,stop_event,thread).register(stop_background,stop_event,thread)

Điều này sẽ gọi chức năng ngay trước khi quá trình Python tồn tại, chấm dứt luồng daemon nền một cách duyên dáng.

Bây giờ chúng ta đã biết cách dừng một nhiệm vụ nền trong một chuỗi daemon, hãy để Lôi nhìn vào một số ví dụ đã làm việc.

Bị nhầm lẫn bởi API mô -đun luồng? Tải xuống bảng cheat pdf miễn phí của tôi Download my FREE PDF cheat sheet
Download my FREE PDF cheat sheet

Ví dụ về chủ đề daemon dừng đột ngột

Trước khi chúng tôi khám phá cách dừng một tác vụ nền trong một luồng daemon, hãy để Lôi nhìn vào một ví dụ trong đó một nhiệm vụ nền bị chấm dứt đột ngột.

Chúng tôi sẽ xác định một nhiệm vụ nền sẽ chạy trong suốt thời gian của chương trình và thực hiện cứ sau hai giây. Trong trường hợp này, chỉ báo cáo một tin nhắn. Chủ đề chính sẽ thực hiện nhiệm vụ của riêng mình trong một thời gian để cung cấp cho chủ đề nền một cơ hội để chạy. Sau đó, luồng chính sẽ chấm dứt và đột ngột dừng luồng nền.

Đầu tiên, chúng ta có thể xác định một hàm có tên () mà chúng ta sẽ thực thi trong nền thông qua một luồng daemon.task() that we will execute in the background via a daemon thread.task() that we will execute in the background via a daemon thread.

Hàm sẽ bao gồm một vòng lặp trong thời gian lặp lại mãi mãi. Mỗi lần lặp, chức năng sẽ ngủ trong 2 giây, sau đó thức dậy và thực hiện nhiệm vụ, trong trường hợp này là chỉ cần in một tin nhắn.

Hàm hoàn chỉnh cho nhiệm vụ nền được liệt kê dưới đây.

# Nhiệm vụ nền

nhiệm vụ def ():task():task():

& nbsp; & nbsp; & nbsp; & nbsp;# chạy mãi mãi# run forever# run forever

    whileTrue:whileTrue:whileTrue:

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;# run every 2 seconds# run every 2 seconds

        sleep(2)sleep(2)sleep(2)

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;# thực hiện nhiệm vụ# perform task# perform task

& nbsp; & nbsp; & nbsp; & nbsp;print('Background performing task')print('Background performing task')

Trở lại trong luồng chính, sau đó chúng ta có thể tạo một luồng mới. SAPRED và định cấu hình nó để thực thi chức năng Task () của chúng ta và làm như vậy như một luồng daemon. Sau khi được tạo, chúng ta có thể bắt đầu chủ đề mới này ngay lập tức.threading.Thread instance and configure it to execute our task() function and to do so as a daemon thread. Once created, we can start this new thread immediately.threading.Thread instance and configure it to execute our task() function and to do so as a daemon thread. Once created, we can start this new thread immediately.

.......

# Đăng ký AT Lối ra

thread=Thread(target=task,daemon=True,name="Background")=Thread(target=task,daemon=True,name="Background")=Thread(target=task,daemon=True,name="Background")

thread.start().start().start()

Điều này sẽ gọi chức năng ngay trước khi quá trình Python tồn tại, chấm dứt luồng daemon nền một cách duyên dáng.

.......

# Đăng ký AT Lối ra

Điều này sẽ gọi chức năng ngay trước khi quá trình Python tồn tại, chấm dứt luồng daemon nền một cách duyên dáng.('Main thread running...')

sleep(10)(10)(10)

Bây giờ chúng ta đã biết cách dừng một nhiệm vụ nền trong một chuỗi daemon, hãy để Lôi nhìn vào một số ví dụ đã làm việc.('Main thread stopping')

Bị nhầm lẫn bởi API mô -đun luồng? Tải xuống bảng cheat pdf miễn phí của tôi Download my FREE PDF cheat sheet

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

Ví dụ về chủ đề daemon dừng đột ngột

Trước khi chúng tôi khám phá cách dừng một tác vụ nền trong một luồng daemon, hãy để Lôi nhìn vào một ví dụ trong đó một nhiệm vụ nền bị chấm dứt đột ngột.

Chúng tôi sẽ xác định một nhiệm vụ nền sẽ chạy trong suốt thời gian của chương trình và thực hiện cứ sau hai giây. Trong trường hợp này, chỉ báo cáo một tin nhắn. Chủ đề chính sẽ thực hiện nhiệm vụ của riêng mình trong một thời gian để cung cấp cho chủ đề nền một cơ hội để chạy. Sau đó, luồng chính sẽ chấm dứt và đột ngột dừng luồng nền.time import sleep

Đầu tiên, chúng ta có thể xác định một hàm có tên () mà chúng ta sẽ thực thi trong nền thông qua một luồng daemon.threading import Threadthreading import Thread

# Nhiệm vụ nền

nhiệm vụ def ():task():task():

& nbsp; & nbsp; & nbsp; & nbsp;# chạy mãi mãi# run forever# run forever

    whileTrue:whileTrue:whileTrue:

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;# run every 2 seconds# run every 2 seconds

        sleep(2)sleep(2)sleep(2)

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;# thực hiện nhiệm vụ# perform task# perform task

& nbsp; & nbsp; & nbsp; & nbsp;print('Background performing task')print('Background performing task')

# Đăng ký AT Lối ra

thread=Thread(target=task,daemon=True,name="Background")=Thread(target=task,daemon=True,name="Background")=Thread(target=task,daemon=True,name="Background")

thread.start().start().start()

# Đăng ký AT Lối ra

Điều này sẽ gọi chức năng ngay trước khi quá trình Python tồn tại, chấm dứt luồng daemon nền một cách duyên dáng.('Main thread running...')('Main thread running...')

sleep(10)(10)(10)

Bây giờ chúng ta đã biết cách dừng một nhiệm vụ nền trong một chuỗi daemon, hãy để Lôi nhìn vào một số ví dụ đã làm việc.('Main thread stopping')('Main thread stopping')

Bị nhầm lẫn bởi API mô -đun luồng? Tải xuống bảng cheat pdf miễn phí của tôi

Ví dụ về chủ đề daemon dừng đột ngột

Trước khi chúng tôi khám phá cách dừng một tác vụ nền trong một luồng daemon, hãy để Lôi nhìn vào một ví dụ trong đó một nhiệm vụ nền bị chấm dứt đột ngột.

Chúng tôi sẽ xác định một nhiệm vụ nền sẽ chạy trong suốt thời gian của chương trình và thực hiện cứ sau hai giây. Trong trường hợp này, chỉ báo cáo một tin nhắn. Chủ đề chính sẽ thực hiện nhiệm vụ của riêng mình trong một thời gian để cung cấp cho chủ đề nền một cơ hội để chạy. Sau đó, luồng chính sẽ chấm dứt và đột ngột dừng luồng nền.

Đầu tiên, chúng ta có thể xác định một hàm có tên () mà chúng ta sẽ thực thi trong nền thông qua một luồng daemon.

Hàm sẽ bao gồm một vòng lặp trong thời gian lặp lại mãi mãi. Mỗi lần lặp, chức năng sẽ ngủ trong 2 giây, sau đó thức dậy và thực hiện nhiệm vụ, trong trường hợp này là chỉ cần in một tin nhắn.

Hàm hoàn chỉnh cho nhiệm vụ nền được liệt kê dưới đây.

# Nhiệm vụ nền

Bối cảnh thực hiện nhiệm vụ

Bối cảnh thực hiện nhiệm vụ

Bối cảnh thực hiện nhiệm vụ

Dừng chủ đề chính dừng lại

Tiếp theo, hãy để Lôi nhìn vào cách chúng ta có thể thêm một số điều khiển đối với việc dừng luồng daemon.


Khóa học luồng python miễn phí

Đăng ký khóa học email 7 ngày miễn phí của tôi và khám phá cách sử dụng mô-đun luồng Python, bao gồm cách tạo và bắt đầu các chủ đề mới, cách sử dụng Mutex và Semaphore, và nhiều hơn nữa!

Nhấp vào nút bên dưới và nhập địa chỉ email của bạn để đăng ký và nhận bài học đầu tiên ngay bây giờ.

Bắt đầu khóa học email miễn phí của bạn ngay bây giờ! & NBSP; 
 


Ví dụ về việc dừng một sợi daemon

Ví dụ từ phần trước có thể được cập nhật để cung cấp kiểm soát việc dừng luồng daemon.

Điều này có thể đạt được bằng cách có vòng lặp chính trong tác vụ nền Kiểm tra một luồng được chia sẻ. Mỗi lần lặp và có luồng chính đặt sự kiện tại điểm mà chúng tôi muốn thoát khỏi chương trình. Điều này sẽ cho phép luồng nền có kết thúc được kiểm soát trước luồng chính và toàn bộ quá trình Python chấm dứt.threading.Event each iteration and have the main thread set the event at the point that we wish to exit the program. This will allow the background thread to have a controlled termination before the main thread and the entire Python process terminates.threading.Event each iteration and have the main thread set the event at the point that we wish to exit the program. This will allow the background thread to have a controlled termination before the main thread and the entire Python process terminates.

Đầu tiên, chúng ta có thể cập nhật hàm Task () để lấy một luồng. Chủ đề làm đối số và sau đó kiểm tra xem sự kiện này không được đặt từng lần lặp của vòng lặp.task() function to take a threading.Thread instance as an argument and then to check that the event is not set each iteration of the while-loop.task() function to take a threading.Thread instance as an argument and then to check that the event is not set each iteration of the while-loop.

Khi sự kiện được đặt, vòng lặp sẽ thoát và nhiệm vụ nền sẽ báo cáo một thông báo rằng nó đang chấm dứt một cách duyên dáng.

Hàm Task () Cập nhật với các thay đổi này được liệt kê dưới đây.task() function with these changes is listed below.task() function with these changes is listed below.

# Nhiệm vụ nền

Nhiệm vụ def (sự kiện):task(event):task(event):

& nbsp; & nbsp; & nbsp; & nbsp;# chạy cho đến khi sự kiện được đặt# run until the event is set# run until the event is set

    whilenotevent.is_set():whilenotevent.is_set():whilenotevent.is_set():

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;# run every 2 seconds# run every 2 seconds

        sleep(2)sleep(2)sleep(2)

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;# thực hiện nhiệm vụ# perform task# perform task

& nbsp; & nbsp; & nbsp; & nbsp;print('Background performing task')print('Background performing task')

# Đăng ký AT Lối raprint('Background done')

Điều này sẽ gọi chức năng ngay trước khi quá trình Python tồn tại, chấm dứt luồng daemon nền một cách duyên dáng.('Main thread running...')threading.Event object and pass it to the task() function as an argument when configuring our new daemon threading.Thread instance.

.......

# Chuẩn bị trạng thái dừng nền

stop_event=Event()=Event()=Event()

# Tạo và bắt đầu luồng nền

thread=Thread(target=task,args=(stop_event,),daemon=True,name="Background")=Thread(target=task,args=(stop_event,),daemon=True,name="Background")=Thread(target=task, args=(stop_event,),daemon=True,name="Background")

thread.start().start().start()

Sau đó, một khi ứng dụng kết thúc trong luồng chính và sẵn sàng chấm dứt, chúng tôi có thể đặt sự kiện và tham gia luồng daemon, chặn cho đến khi nó chấm dứt.

.......

# Chuẩn bị trạng thái dừng nền

stop_event.set().set().set()

# Tạo và bắt đầu luồng nền

thread.join().join().join()

Sau đó, một khi ứng dụng kết thúc trong luồng chính và sẵn sàng chấm dứt, chúng tôi có thể đặt sự kiện và tham gia luồng daemon, chặn cho đến khi nó chấm dứt.('Main done')

Sau đó, một khi ứng dụng kết thúc trong luồng chính và sẵn sàng chấm dứt, chúng tôi có thể đặt sự kiện và tham gia luồng daemon, chặn cho đến khi nó chấm dứt.('Main done')

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

# Yêu cầu điểm dừng nền

# Chờ luồng nền dừng lại

In ('Chính công')time import sleep

Tying này lại với nhau, ví dụ hoàn chỉnh về việc dừng một luồng daemon được liệt kê dưới đây.time import sleepthreading import Thread

# SuperfastPython.comthreading import Threadthreading import Event

# Ví dụ về việc dừng công việc nền chủ đề daemonthreading import Event

# Nhiệm vụ nềntask(event):

Nhiệm vụ def (sự kiện):task(event):# run until the event is set

    whilenotevent.is_set():whilenotevent.is_set():whilenotevent.is_set():

& nbsp; & nbsp; & nbsp; & nbsp;# chạy cho đến khi sự kiện được đặt# run until the event is set# run every 2 seconds

        sleep(2)sleep(2)sleep(2)

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;# run every 2 seconds# perform task

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;# thực hiện nhiệm vụ# perform taskprint('Background performing task')

& nbsp; & nbsp; & nbsp; & nbsp;print('Background performing task')print('Background done')

# Chuẩn bị trạng thái dừng nền

stop_event=Event()=Event()=Event()

# Tạo và bắt đầu luồng nền

thread=Thread(target=task,args=(stop_event,),daemon=True,name="Background")=Thread(target=task,args=(stop_event,),daemon=True,name="Background")=Thread(target=task,args=(stop_event,),daemon=True, name="Background")

thread.start().start().start()

Sau đó, một khi ứng dụng kết thúc trong luồng chính và sẵn sàng chấm dứt, chúng tôi có thể đặt sự kiện và tham gia luồng daemon, chặn cho đến khi nó chấm dứt.

Sau đó, một khi ứng dụng kết thúc trong luồng chính và sẵn sàng chấm dứt, chúng tôi có thể đặt sự kiện và tham gia luồng daemon, chặn cho đến khi nó chấm dứt.('Main done')('Main thread running...')

sleep(10)(10)(10)

# Yêu cầu điểm dừng nền('Main thread stopping')

# Chuẩn bị trạng thái dừng nền

stop_event.set().set().set()

# Tạo và bắt đầu luồng nền

thread.join().join().join()

Sau đó, một khi ứng dụng kết thúc trong luồng chính và sẵn sàng chấm dứt, chúng tôi có thể đặt sự kiện và tham gia luồng daemon, chặn cho đến khi nó chấm dứt.('Main done')

Sau đó, một khi ứng dụng kết thúc trong luồng chính và sẵn sàng chấm dứt, chúng tôi có thể đặt sự kiện và tham gia luồng daemon, chặn cho đến khi nó chấm dứt.('Main done')

# Yêu cầu điểm dừng nền

# Chờ luồng nền dừng lại

In ('Chính công')

Tying này lại với nhau, ví dụ hoàn chỉnh về việc dừng một luồng daemon được liệt kê dưới đây.time import sleep

# SuperfastPython.comthreading import Thread

# Ví dụ về việc dừng công việc nền chủ đề daemonthreading import Event

# Ví dụ về việc dừng công việc nền chủ đề daemonthreading import Event

# Ví dụ về việc dừng công việc nền chủ đề daemonthreading import Event

# Ví dụ về việc dừng công việc nền chủ đề daemonthreading import Event

# Nhiệm vụ nền

# Ví dụ về việc dừng công việc nền chủ đề daemonthreading import Event

# Nhiệm vụ nền

Nhiệm vụ def (sự kiện):task(event):

& nbsp; & nbsp; & nbsp; & nbsp;# chạy cho đến khi sự kiện được đặt# run until the event is set, the design could be improved further if the background thread waited on a threading.Condition each iteration. This would allow the main thread to notify the daemon thread to wake-up and check the status of the event, avoiding any prolonged waiting in the main thread. This would be especially useful if the background thread only ran every minute or hour.

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;# run every 2 seconds

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;# thực hiện nhiệm vụ# perform task

& nbsp; & nbsp; & nbsp; & nbsp;print('Background performing task')thread.Event, but it required a manual intervention by the main thread.

& nbsp; & nbsp; & nbsp; & nbsp; in ('hoàn thành nền'))print('Background done')

# Yêu cầu điểm dừng nền('Main thread running...')threading.Event and waits on the threading.Thread instance of the background task. We can then have this function called by the Python process automatically just prior to the Process terminating.

# Chờ luồng nền dừng lại('Main thread stopping')atexit module and by registering functions to call at the exit of the Python process via the atexit.register() function.

Hàm này lấy tên của người có thể gọi để thực thi, cũng như bất kỳ đối số nào có thể cần được chuyển cho người được gọi.

Chúng ta có thể xác định một hàm có tên stop_background () lấy luồng.Event và luồng.stop_background() that takes the threading.Event and threading.Thread instances as arguments then sets the event and waits on the thread.stop_background() that takes the threading.Event and threading.Thread instances as arguments then sets the event and waits on the thread.

Hàm hoàn chỉnh được liệt kê dưới đây.

# Dừng nhiệm vụ nền một cách duyên dáng trước khi thoát

def stop_background (stop_event, chủ đề):stop_background(stop_event,thread):stop_background(stop_event,thread):

& nbsp; & nbsp; & nbsp; & nbsp; in ('khi dừng dừng')print('At exit stopping')print('At exit stopping')

& nbsp; & nbsp; & nbsp; & nbsp;# yêu cầu điểm dừng nền# request the background thread stop# request the background thread stop

    stop_event.set()stop_event.set()stop_event.set()

& nbsp; & nbsp; & nbsp; & nbsp;# chờ luồng nền dừng lại# wait for the background thread to stop# wait for the background thread to stop

    thread.join()thread.join()thread.join()

& nbsp;print('At exit done')print('At exit done')

Sau đó chúng ta có thể cập nhật chủ đề chính để đăng ký chức năng này.

.......

# Đăng ký AT Lối ra

atexit.register(stop_background,stop_event,thread).register(stop_background,stop_event,thread).register(stop_background,stop_event,thread)

Và đó là nó.

Kết hợp điều này lại với nhau, ví dụ hoàn chỉnh về việc dừng một luồng daemon khi thoát được liệt kê bên dưới.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

# SuperfastPython.com

# Ví dụ về việc dừng nhiệm vụ nền chủ đề daemon khi thoát

từ thời gian nhập vào giấc ngủtime import sleeptime import sleep

từ luồng nhập luồngthreading import Threadthreading import Thread

Từ sự kiện nhập luồngthreading import Eventthreading import Event

Nhập atexitatexitatexit

# Nhiệm vụ nền

Nhiệm vụ def (sự kiện):task(event):task(event):

& nbsp; & nbsp; & nbsp; & nbsp;# chạy mãi mãi# run forever# run forever

    whilenotevent.is_set():whilenotevent.is_set():whilenotevent.is_set():

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;# run every 2 seconds# run every 2 seconds

        sleep(2)sleep(2)sleep(2)

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;# thực hiện nhiệm vụ# perform task# perform task

& nbsp; & nbsp; & nbsp; & nbsp;print('Background performing task')print('Background performing task')

& nbsp; & nbsp; & nbsp; & nbsp; in ('hoàn thành nền'))print('Background done')print('Background done')

# Dừng nhiệm vụ nền một cách duyên dáng trước khi thoát

def stop_background (stop_event, chủ đề):stop_background(stop_event,thread):stop_background(stop_event,thread):

& nbsp; & nbsp; & nbsp; & nbsp; in ('khi dừng dừng')print('At exit stopping')print('At exit stopping')

& nbsp; & nbsp; & nbsp; & nbsp;# yêu cầu điểm dừng nền# request the background thread stop# request the background thread stop

    stop_event.set()stop_event.set()stop_event.set()

& nbsp; & nbsp; & nbsp; & nbsp;# chờ luồng nền dừng lại# wait for the background thread to stop# wait for the background thread to stop

    thread.join()thread.join()thread.join()

& nbsp;print('At exit done')print('At exit done')

Sau đó chúng ta có thể cập nhật chủ đề chính để đăng ký chức năng này.

stop_event=Event()=Event()=Event()

.....

thread=Thread(target=task,args=(stop_event,),daemon=True,name="Background")=Thread(target=task,args=(stop_event,),daemon=True,name="Background")=Thread(target=task,args=(stop_event,),daemon=True,name="Background")

thread.start().start().start()

# Đăng ký AT Lối ra

atexit.register(stop_background,stop_event,thread).register(stop_background,stop_event,thread).register(stop_background,stop_event,thread)

Và đó là nó.

Kết hợp điều này lại với nhau, ví dụ hoàn chỉnh về việc dừng một luồng daemon khi thoát được liệt kê bên dưới.('Main thread running...')

sleep(10)(10)(10)

# SuperfastPython.com('Main thread stopping')

# Ví dụ về việc dừng nhiệm vụ nền chủ đề daemon khi thoát

từ thời gian nhập vào giấc ngủtime import sleep

từ luồng nhập luồngthreading import Thread

Từ sự kiện nhập luồngthreading import Eventstop_background() function is called. This function sets the event and joins the thread instance, waiting for it to terminate.

Nhập atexitatexit

# Nhiệm vụ nền

Nhiệm vụ def (sự kiện):task(event):

& nbsp; & nbsp; & nbsp; & nbsp;# chạy mãi mãi# run forever

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;# run every 2 seconds

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;# run every 2 seconds

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;# run every 2 seconds

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;# run every 2 seconds

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;# thực hiện nhiệm vụ# perform task

& nbsp; & nbsp; & nbsp; & nbsp;print('Background performing task')

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;# run every 2 seconds

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;# thực hiện nhiệm vụ# perform task

& nbsp; & nbsp; & nbsp; & nbsp;print('Background performing task')

& nbsp; & nbsp; & nbsp; & nbsp; in ('hoàn thành nền'))print('Background done')

...

  • Kết hợp điều này lại với nhau, ví dụ hoàn chỉnh về việc dừng một luồng daemon khi thoát được liệt kê bên dưới.('Main thread running...')
  • # SuperfastPython.com('Main thread stopping')
  • từ thời gian nhập vào giấc ngủ
  • từ luồng nhập luồng
  • Từ sự kiện nhập luồngstop_background() function is called. This function sets the event and joins the thread instance, waiting for it to terminate.

Nhập atexit

Nhiệm vụ def (sự kiện):

& nbsp; & nbsp; & nbsp; & nbsp;# chạy mãi mãi
Ask your questions in the comments below and I will do my best to answer.

Các luồng nền thông báo rằng sự kiện được đặt, thoát khỏi vòng lặp của nó và chấm dứt.