Hướng dẫn how do you delay the start of a thread in python? - làm thế nào để bạn trì hoãn việc bắt đầu một chuỗi trong python?

Tôi có chức năng phát hiện [], Timeralg []

Trong khi chạy hàm Timeralg [], tôi muốn Detement [] bắt đầu song song sau một độ trễ cụ thể. Hiện tại tôi đã thử như thế này

def timeralg[c1,c2,c3,c4]:
    t=[4,4,4,6,6,20,24,28,32,36,40]#delay determining array
    for y in range[0,3]:
        print 'y is ',y
        if[[c1>=c2]and[c1>=c3]]:
            print 'timer1 on for'
            x=t[c1]        
            print x
            c1=0

        GPIO.output[5,False]#Red1
        GPIO.output[13,True]#red2
        GPIO.output[12,True]#red3
        GPIO.output[7,True]#green1
        if[y==2]:
            t = threading.Thread[detection[]]
            t.start[]
            print 'processing strtd in from 1'

        time.sleep[x-3]
        GPIO.output[7,False]
        GPIO.output[3,True]#Yellow1
        time.sleep[3]
        GPIO.output[3,False]#Yellow1
        GPIO.output[5,True]#Red1

Không giống như điều này, tôi muốn 'T' bắt đầu sau một độ trễ cụ thể được chỉ định bởi tôi.

Bạn có thể ngủ một chủ đề bằng cách gọi hàm thời gian.s ngủ [].sleep a thread by calling the time.sleep[] function.

Trong hướng dẫn này, bạn sẽ khám phá cách ngủ một chủ đề trong Python.

Bắt đầu nào.

  • Cần ngủ trong một sợi
  • Ngủ là gì
  • Tại sao sử dụng giấc ngủ
    • Ngủ để giới thiệu một sự chậm trễ
    • Ngủ để làm chậm một vòng lặp
    • Ngủ để cho các chủ đề khác chạy
    • Ngủ để gỡ lỗi
  • Làm thế nào để ngủ trong một sợi
    • Làm thế nào để ngủ trong mili giây
    • Làm thế nào để ngủ trong vài giây
    • Làm thế nào để ngủ trong vài phút
    • Làm thế nào để ngủ hàng giờ
    • Làm thế nào để ngủ trong nhiều ngày
  • Mẹo khi sử dụng giấc ngủ
    • Ngủ sẽ không giải phóng khóa
    • Sử dụng một giấc ngủ khi bận rộn-chờ đợi
    • Ngủ trong không giây
    • Cân nhắc chờ đợi thay vì ngủ
    • Bảo vệ chống lại tín hiệu đầu cuối
  • Đọ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.

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

Trong lập trình đồng thời, chúng tôi có thể muốn luồng hiện tại chặn hoặc ngủ trong một thời gian xác định.

Làm thế nào chúng ta có thể làm cho các chủ đề ngủ trong Python?

Ngủ là gì

Tại sao sử dụng giấc ngủtime.sleep[] function will cause the calling thread to block for the specified number of seconds.

Ngủ để giới thiệu một sự chậm trễ

Ngủ để làm chậm một vòng lặp

Ngủ để cho các chủ đề khác chạy

Ngủ để gỡ lỗi..

Làm thế nào để ngủ trong một sợi

time.sleep[5].sleep[5]

Làm thế nào để ngủ trong mili giâytime.sleep[] function takes a floating point number of seconds to sleep.

Làm thế nào để ngủ trong vài giây

Làm thế nào để ngủ trong vài phút

Ngủ để làm chậm một vòng lặp

Ngủ để cho các chủ đề khác chạy

Ngủ để gỡ lỗi..

Làm thế nào để ngủ trong một sợi

time.sleep[0.1].sleep[0.1]

Làm thế nào để ngủ trong mili giâytime.sleep[] function from the main thread, which is the default thread in your progress. We may also call the time.sleep[] function from a new thread used to execute a custom function.

Làm thế nào để ngủ trong vài giây

Làm thế nào để ngủ trong vài phút

Ngủ để làm chậm một vòng lặp

Ngủ để cho các chủ đề khác chạy

Ngủ để gỡ lỗi

Làm thế nào để ngủ trong một sợi

Ngủ để làm chậm một vòng lặp

Ngủ để cho các chủ đề khác chạy

Ngủ để gỡ lỗitime.sleep[] function calls a system function to block the calling thread. e.g. the sleep system call. This function call itself may have more or less precision than you require. For example, although you specify a sleep of one or a few milliseconds, the underlying system call may have a precision limited at tens of milliseconds.

Làm thế nào để ngủ trong một sợi

Làm thế nào để ngủ trong mili giây

Làm thế nào để ngủ trong vài giây
Download my FREE PDF cheat sheet

Tại sao sử dụng giấc ngủ

Làm thế nào để ngủ trong vài phút

Ngủ để cho các chủ đề khác chạy

  1. Ngủ để gỡ lỗi
  2. Làm thế nào để ngủ trong một sợi
  3. Làm thế nào để ngủ trong mili giây
  4. Làm thế nào để ngủ trong vài giây

Làm thế nào để ngủ trong vài phút

Ngủ để giới thiệu một sự chậm trễ

Làm thế nào để ngủ hàng giờ

Làm thế nào để ngủ trong nhiều ngày

  • Mẹo khi sử dụng giấc ngủ
  • Ngủ sẽ không giải phóng khóa
  • Sử dụng một giấc ngủ khi bận rộn-chờ đợi

Ngủ trong không giây

Có thể chỉ cần làm chậm một quy trình để cho phép người dùng hoặc một luồng khác để thông báo và trả lời các thay đổi trong ứng dụng.

Ngủ để làm chậm một vòng lặp

Chúng tôi có thể giới thiệu một giấc ngủ để làm chậm quá trình thực hiện một vòng lặp.

Điều này có thể là để làm cho chương trình có thể sử dụng nhiều hơn, chẳng hạn như cho phép người dùng xem và đọc tin nhắn được in từng lần lặp.

Nó cũng có thể là để tránh áp đảo một tài nguyên bên ngoài được sử dụng mỗi lần lặp của vòng lặp.

Ngủ để cho các chủ đề khác chạy

Gọi giấc ngủ sẽ chặn chủ đề hiện tại.

Điều này sẽ báo hiệu cho hệ điều hành cơ bản rằng luồng là ứng cử viên cho một công tắc ngữ cảnh.

Bạn có thể nhớ lại rằng các hệ điều hành hiện đại như Windows, MacOS và Linux đạt được đa nhiệm thông qua các luồng chuyển đổi ngữ cảnh. Đây là nơi các luồng chạy được treo và các luồng lơ lửng được nối lại. Quá trình chuyển đổi ngữ cảnh này giữa các luồng đang xảy ra liên tục bởi hệ điều hành để mô phỏng việc chạy nhiều chương trình và luồng chương trình đồng thời.

Gọi giấc ngủ là một cách để cho phép các luồng khác trong ứng dụng Python hoặc các luồng khác trên hệ thống để chạy.

Điều này có thể đạt được bằng một cuộc gọi theo thời gian.s ngủ [] với 0 giây, ví dụ:time.sleep[] with zero seconds, for example:

.....

# Cho phép các luồng khác chạy

time.sleep[0].sleep[0]

Ngủ để gỡ lỗi

Thêm giấc ngủ vào một chương trình có thể giúp phơi bày lỗi.

Điều kiện chủng tộc có thể xảy ra nếu hai luồng cố gắng đọc hoặc sửa đổi các biến không được bảo vệ đồng thời hoặc phối hợp với Chờ/Thông báo.

Thông thường, các điều kiện chủng tộc không được phơi bày cho đến khi một số sự chậm trễ bất ngờ được đưa vào một chương trình, chẳng hạn như một tài nguyên mất một thời gian dài bất thường.

Chúng tôi có thể nhấn mạnh kiểm tra các ứng dụng đồng thời của chúng tôi và giúp phơi bày các điều kiện chủng tộc bằng cách thêm giấc ngủ vào mã trong khi thử nghiệm.

Ví dụ: nếu một luồng đang chờ được thông báo trên luồng. .threading.Condition by another thread, and the oher thread calls notify[] before the waiting thread calls wait[] then this indicates a race condition and the waiting thread will never be notified.

Chúng tôi có thể buộc điều kiện cuộc đua này bằng cách thêm một cuộc gọi đến thời gian.s ngủ [] trước khi phát chờ đợi [] chính xác.time.sleep[] prior to the waiting thread calling wait[] to simulate a natural context-switching delay and see if the wait-notify mechanism used in the program still operates correctly.

Bạn có thể tìm hiểu thêm về loại điều kiện cuộc đua này trong hướng dẫn này:

  • Cách sửa chữa một điều kiện cuộc đua với thời gian trong Python

Tiếp theo, hãy để một cái nhìn kỹ hơn về cách ngủ.

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

Tải xuống bảng gian lận API luồng của tôi và như một phần thưởng, bạn sẽ có quyền truy cập miễn phí vào khóa học email 7 ngày của tôi.

Khám phá cách sử dụng mô -đun luồng Python bao gồm cách tạo và khởi động các luồng mới và cách sử dụng khóa và semaphores mutex

Tìm hiểu thêm & NBSP;
 

Làm thế nào để ngủ trong một sợi

Chúng ta có thể ngủ một chủ đề bằng cách gọi hàm thời gian.s ngủ [] từ luồng.time.sleep[] function from the thread.

Ví dụ:

.....

# Cho phép các luồng khác chạy

time.sleep[10].sleep[10]

Ngủ để gỡ lỗi

Ví dụ:

.....

# Cho phép các luồng khác chạy

time.sleep[0.010].sleep[0.010]

Ngủ để gỡ lỗi

Thêm giấc ngủ vào một chương trình có thể giúp phơi bày lỗi.

Điều kiện chủng tộc có thể xảy ra nếu hai luồng cố gắng đọc hoặc sửa đổi các biến không được bảo vệ đồng thời hoặc phối hợp với Chờ/Thông báo.

Thông thường, các điều kiện chủng tộc không được phơi bày cho đến khi một số sự chậm trễ bất ngờ được đưa vào một chương trình, chẳng hạn như một tài nguyên mất một thời gian dài bất thường.

Chúng tôi có thể nhấn mạnh kiểm tra các ứng dụng đồng thời của chúng tôi và giúp phơi bày các điều kiện chủng tộc bằng cách thêm giấc ngủ vào mã trong khi thử nghiệm.

Ví dụ: nếu một luồng đang chờ được thông báo trên luồng. .

Ví dụ:

  • # Ngủ chuỗi hiện tại trong 10 giây
  • Hàm giấc ngủ có giá trị điểm nổi trong số giây để ngủ, trong đó các phân số của một giây là mili giây.
  • # Ngủ chủ đề hiện tại trong 10 mili giây
  • Chúng ta có thể ngủ trong các khoảng thời gian dài hơn như phút và ngày bằng cách chỉ định các khoảng thời gian này theo số giây.

Hãy cùng làm cho điều này rõ ràng với một vài ví dụ.

Lưu ý: Bạn có thể nhớ lại rằng mặc dù chúng tôi chỉ định một số giây để ngủ, nhưng chương trình có thể ngủ lâu hơn khi tiếp tục duy trì luồng là bất chợt và khả năng của hệ điều hành cơ bản.

Làm thế nào để ngủ trong mili giây

Có 1.000 mili giây trong một giây.time import sleep

Chúng tôi có thể chỉ định khoảng thời gian là một phần điểm nổi của một giây để ngủ trong mili giây.

1.000 mili giây là 1 giây.['Sleeping for half a second']

100 mili giây là 0,1 giây.

sleep[0.5][0.5]

10 mili giây là 0,01 giây.

Ví dụ:

Lưu ý: Bạn có thể nhớ lại rằng mặc dù chúng tôi chỉ định một số giây để ngủ, nhưng chương trình có thể ngủ lâu hơn khi tiếp tục duy trì luồng là bất chợt và khả năng của hệ điều hành cơ bản.

Làm thế nào để ngủ trong mili giây

Có 1.000 mili giây trong một giây.time import sleep

Chúng tôi có thể chỉ định khoảng thời gian là một phần điểm nổi của một giây để ngủ trong mili giây.

whileTrue:True:

1.000 mili giây là 1 giây.

100 mili giây là 0,1 giây.

Chúng tôi có thể chỉ định khoảng thời gian là một phần điểm nổi của một giây để ngủ trong mili giây.

1.000 mili giây là 1 giây.['Sleeping for half a second']

100 mili giây là 0,1 giây.

sleep[0.5][0.5]

10 mili giây là 0,01 giây.

1 mili giây là 0,001 giây.time.sleep[] function takes a number of seconds to sleep as an argument directly.

Ví dụ dưới đây cho thấy cách ngủ trong nửa giây hoặc 500 mili giây.

Lưu ý: Bạn có thể nhớ lại rằng mặc dù chúng tôi chỉ định một số giây để ngủ, nhưng chương trình có thể ngủ lâu hơn khi tiếp tục duy trì luồng là bất chợt và khả năng của hệ điều hành cơ bản.

Làm thế nào để ngủ trong mili giây

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

# Báo cáo một tin nhắn

In ['Ngủ trong 30 giây']['Sleeping for 30 seconds']

# khối

sleep[30][30]

Chúng tôi có thể cập nhật chương trình để chạy cứ sau 30 giây hoặc hai lần mỗi phút bằng cách gọi giấc ngủ trong một vòng lặp.

Ví dụ:

# SuperfastPython.com

# Ví dụ về chạy hai lần mỗi phút

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

# Chạy mãi mãi

whileTrue:True:

# Làm một nhiệm vụ

# ...

# Báo cáo một tin nhắn

In ['Ngủ trong 30 giây']['Sleeping for 30 seconds']

# khối

sleep[30][30]

Chúng tôi có thể cập nhật chương trình để chạy cứ sau 30 giây hoặc hai lần mỗi phút bằng cách gọi giấc ngủ trong một vòng lặp.

Ví dụ:

Ví dụ:

  • # SuperfastPython.com
  • # Ví dụ về chạy hai lần mỗi phút
  • # Chạy mãi mãi

# Làm một nhiệm vụ

# ...

# SuperfastPython.com

# Ví dụ về chạy hai lần mỗi phút

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

# Báo cáo một tin nhắn

In ['Ngủ trong 30 giây']['Sleeping for 5 minutes']

# khối

sleep[5*60][5*60]

Chúng tôi có thể cập nhật chương trình để chạy cứ sau 30 giây hoặc hai lần mỗi phút bằng cách gọi giấc ngủ trong một vòng lặp.

Ví dụ:

# SuperfastPython.com

# Ví dụ về chạy hai lần mỗi phút

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

# Chạy mãi mãi

whileTrue:True:

# Làm một nhiệm vụ

# ...

# Báo cáo một tin nhắn

In ['Ngủ trong 30 giây']['Sleeping for 5 minutes']

# khối

sleep[5*60][5*60]

Chúng tôi có thể cập nhật chương trình để chạy cứ sau 30 giây hoặc hai lần mỗi phút bằng cách gọi giấc ngủ trong một vòng lặp.

Ví dụ:

# SuperfastPython.com

# Ví dụ về chạy hai lần mỗi phút

Ví dụ:

  • # SuperfastPython.com
  • # Ví dụ về chạy hai lần mỗi phút
  • # Chạy mãi mãi

# Làm một nhiệm vụ

Ví dụ:

  • # SuperfastPython.com
  • # Ví dụ về chạy hai lần mỗi phút
  • # Chạy mãi mãi

# Làm một nhiệm vụ

# SuperfastPython.com

# Ví dụ về chạy hai lần mỗi phút

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

# Báo cáo một tin nhắn

# Chạy mãi mãi['Sleeping for 12 hours']

# khối

sleep[12*[60*60]][12* [60*60]]

Chúng tôi có thể cập nhật chương trình để chạy cứ sau 30 giây hoặc hai lần mỗi phút bằng cách gọi giấc ngủ trong một vòng lặp.

Ví dụ:

# SuperfastPython.com

# Ví dụ về chạy hai lần mỗi phút

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

# Chạy mãi mãi

whileTrue:True:

# Làm một nhiệm vụ

# ...

# Báo cáo một tin nhắn

# Chạy mãi mãi['Sleeping for 12 hours']

# khối

sleep[12*[60*60]][12*[60*60]]

Chúng tôi có thể cập nhật chương trình để chạy cứ sau 30 giây hoặc hai lần mỗi phút bằng cách gọi giấc ngủ trong một vòng lặp.

Ví dụ:

# SuperfastPython.com

# Ví dụ về chạy hai lần mỗi phút

Ví dụ:

  • # SuperfastPython.com
  • # Ví dụ về chạy hai lần mỗi phút
  • # Chạy mãi mãi

# Làm một nhiệm vụ

  • # ...
  • Làm thế nào để ngủ trong vài phút
  • Chúng ta có thể ngủ trong một số phút nhất định bằng cách chỉ định khoảng thời gian theo giây.

1 phút là 60 giây.

# SuperfastPython.com

# Ví dụ về chạy hai lần mỗi phút

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

# Báo cáo một tin nhắn

# Chạy mãi mãi['Sleeping for 7 days']

# khối

sleep[7*[60*60*24]][7* [60*60*24]]

Chúng tôi có thể cập nhật chương trình để chạy cứ sau 30 giây hoặc hai lần mỗi phút bằng cách gọi giấc ngủ trong một vòng lặp.

Ví dụ:

# SuperfastPython.com

# Ví dụ về chạy hai lần mỗi phút

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

# Chạy mãi mãi

whileTrue:True:

# Làm một nhiệm vụ

# ...

# Báo cáo một tin nhắn

# Chạy mãi mãi['Sleeping for 7 days']

# khối

sleep[7*[60*60*24]][7*[60*60*24]]

Chúng tôi có thể cập nhật chương trình để chạy cứ sau 30 giây hoặc hai lần mỗi phút bằng cách gọi giấc ngủ trong một vòng lặp.

Ví dụ:

# SuperfastPython.comtime.sleep[] function in your program.

# Ví dụ về chạy hai lần mỗi phút

  1. # Chạy mãi mãi
  2. # Làm một nhiệm vụ
  3. # ...
  4. Làm thế nào để ngủ trong vài phút
  5. Chúng ta có thể ngủ trong một số phút nhất định bằng cách chỉ định khoảng thời gian theo giây.

1 phút là 60 giây.

10 phút là 600 giây.

100 phút là 6.000 giây.

Có thể dễ dàng hơn để chỉ định khoảng là phép nhân, ví dụ: 2 phút và 30 giây có thể được chỉ định là 2,5 * [60], là 150 giây.

Ví dụ dưới đây trình bày cách ngủ trong 5 phút được chỉ định là nhân.time.sleep[] while holding a lock, it will not release the resource.

Ví dụ:

# SuperfastPython.com..

# Ví dụ về chạy hai lần mỗi phút

# Chạy mãi mãilock:

# Làm một nhiệm vụ

# SuperfastPython.com..

# Ví dụ về chạy hai lần mỗi phút

sleep[60][60]

# Chạy mãi mãi

# Làm một nhiệm vụ

# ...

Ví dụ:

.....

# có được một mutex

với khóa:lock:

# làm việc gì đó

.....

# có được một mutex

sleep[60][60]

với khóa:

# làm việc gì đó

# ngủ một lúc

Sử dụng một giấc ngủ khi bận rộn-chờ đợi

Đang chờ đợi, còn được gọi là quay, đề cập đến một chủ đề liên tục kiểm tra một điều kiện trong một vòng lặp.

  • Đó là một hình thức chờ đợi liên tục kiểm tra trạng thái mong muốn, thay vì chặn và cho phép các chủ đề khác chạy.

Chúng tôi có thể sử dụng việc chờ đợi bận rộn khi cố gắng phối hợp hai luồng dựa trên thời gian, để tránh bỏ lỡ một sự kiện hoặc thay đổi trạng thái.

Bạn có thể tìm hiểu thêm về sự chờ đợi bận rộn trong hướng dẫn này:

  • Làm thế nào để sử dụng bận rộn chờ đợi ở Python

Một spinlock là một loại chờ đợi cụ thể chờ đợi được sử dụng để chờ khóa loại trừ lẫn nhau.

.....

Bạn có thể tìm hiểu thêm về spinlocks trong hướng dẫn này:

whileTrue:True:

Cách sử dụng spinlock trong Python# try and get the lock

    acquired=lock.acquire[blocking=False]acquired= lock.acquire[blocking=False]

Ví dụ, vòng lặp sau đây cho thấy một spinlock trong đó vòng chờ bận rộn cố gắng để có được một khóa mutex mỗi lần lặp.# check if we got the lock

    ifacquired:ifacquired:

# Ví dụ về một vòng chờ bận rộn cho một spinlocks# stop waiting

        breakbreak

& nbsp; & nbsp; & nbsp; & nbsp;# thử và nhận khóa

& nbsp; & nbsp; & nbsp; & nbsp;# kiểm tra xem chúng tôi có khóa không

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;time.sleep[] to a spinlock.

Ví dụ:

.....

Gánh nặng tính toán của một vòng chờ bận rộn có thể được giảm bớt bằng cách thêm giấc ngủ.

whileTrue:True:

Cách sử dụng spinlock trong Python# try and get the lock

    acquired=lock.acquire[blocking=False]acquired= lock.acquire[blocking=False]

Ví dụ, vòng lặp sau đây cho thấy một spinlock trong đó vòng chờ bận rộn cố gắng để có được một khóa mutex mỗi lần lặp.# check if we got the lock

    ifacquired:ifacquired:

# Ví dụ về một vòng chờ bận rộn cho một spinlocks# stop waiting

        breakbreak

    else:else:

& nbsp; & nbsp; & nbsp; & nbsp;# thử và nhận khóa# sleep for a moment

& nbsp; & nbsp; & nbsp; & nbsp;# kiểm tra xem chúng tôi có khóa khôngsleep[0.1]

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;

Gánh nặng tính toán của một vòng chờ bận rộn có thể được giảm bớt bằng cách thêm giấc ngủ.time.sleep[] for zero seconds.

Ví dụ:

.....

Điều này sẽ trì hoãn việc kiểm tra trạng thái mong muốn mỗi lần lặp của vòng lặp, nhưng sẽ buộc luồng bị chặn và cho phép các luồng khác chạy, có thể cải thiện hiệu suất tổng thể.

time.sleep[0].sleep[0]

Ví dụ dưới đây cho thấy việc thêm độ trễ với một cuộc gọi đến thời gian.s ngủ [] vào spinlock.

# Ví dụ về một vòng chờ bận rộn cho một spinlock với một giấc ngủ

& nbsp; & nbsp; & nbsp; & nbsp; # Ngủ trong giây lát

& nbsp; & nbsp; & nbsp; & nbsp; Ngủ [0,1]

Ngủ trong không giây

Bạn có thể thêm một cuộc gọi đến thời gian.s ngủ [] trong không giây.

# Ngủ trong không có giâytime.sleep[] to add a delay to the application.

Thoạt nhìn, điều này có thể trông giống như một hoạt động của No No [Noop], ví dụ: vô dụng và trình biên dịch có thể tối ưu hóa cuộc gọi ra khỏi sự tồn tại.

Thay vào đó, đây là một mẹo hữu ích trong lập trình đồng thời.threading.Condition and calling the wait[] function with or without a timeout in seconds. The calling thread will block, just like calling a sleep[], but the difference is another thread may call the notify[] function on the condition in order to wake up the blocking thread.

Cụ thể, nó có thể được sử dụng trong các luồng hoặc luồng chuyên sâu tính toán đang thực hiện công việc chuyên sâu CPU trong một vòng lặp.

.....

Thêm một giấc ngủ trong 0 giây sẽ báo hiệu cho hệ điều hành mà luồng có thể được chuyển sang ngữ cảnh sang một luồng khác. Hệ điều hành có thể chọn có thể tôn vinh công tắc này hay không.

Tuy nhiên, nó có thể cho phép một chủ đề chuyên sâu về mặt tính toán và cho phép các chủ đề khác trong ứng dụng tiến triển, có lẽ cải thiện hiệu suất tổng thể.condition:

Cân nhắc chờ đợi thay vì ngủ

condition.wait[timeout=10].wait[timeout=10]

Chúng tôi thường thêm một cuộc gọi đến thời gian.s ngủ [] để thêm độ trễ cho ứng dụng.

  • Thay vào đó, chúng tôi có thể muốn chặn bằng cách chờ đợi thay vào đó.acquire[] function.
  • Điều này có thể đạt được bằng cách sử dụng một nguyên thủy đồng thời, chẳng hạn như một luồng. Chủ đề gọi sẽ chặn, giống như gọi giấc ngủ [], nhưng sự khác biệt là một luồng khác có thể gọi hàm thông báo [] theo điều kiện để đánh thức luồng chặn.wait[].
  • Ví dụ: chúng ta có thể chờ đợi một điều kiện với thời gian chờ:wait[].
  • # có được điều kiệnwait[].
  • với điều kiện:acquire[].

# chặn trong 10 giây hoặc cho đến khi được thông báo

  • Chúng tôi có thể chờ đợi nhiều nguyên thủy đồng thời, chẳng hạn như:

Khóa loại trừ lẫn nhau và khóa reentrant thông qua hàm Acquire [].wait[] function such as a condition, the lock on the primitive is released until the thread is resumed. This is helpful if other threads must acquire the lock in order for the program to progress.

Sự kiện qua Wait [].

Điều kiện qua Wait [].time.sleep[] may be interrupted by a signal.

Rào cản qua Wait [].

Semaphores thông qua Acque [].

Bạn có thể tìm hiểu thêm về việc chặn các cuộc gọi và chờ đợi trong hướng dẫn này:

Điều này liên quan đến việc xác định đầu tiên một hàm được gọi khi nhận được tín hiệu. Hàm lấy số tín hiệu và khung ngăn xếp hiện tại.

# Xử lý Sigint

Def Custom_Handler [Signum, Frame]:custom_handler[signum,frame]:

& nbsp; & nbsp; & nbsp; & nbsp; in ['có một sigint, bỏ qua ngay bây giờ ...']print['Got a SIGINT, ignoring for now...']

Trình xử lý sau đó có thể được đăng ký thông qua hàm tín hiệu.signal [] trước tiên chỉ định tín hiệu để phản hồi, chẳng hạn như tín hiệu.sigint [bị gián đoạn với Control-C] và hàm gọi.signal.signal[] function that first specifies the signal to respond to, such as signal.SIGINT [interrupted with Control-C] and the function to call.

Ví dụ:

.....

# Đăng ký trình xử lý tín hiệu cho Control-C

signal[SIGINT,custom_handler][SIGINT,custom_handler]

Ví dụ dưới đây cho thấy điều này, xử lý các tín hiệu điều khiển-C nếu chúng xảy ra trong khi ngủ và ngăn chặn chương trình chấm dứt.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

# SuperfastPython.com

# Ví dụ về bảo vệ giấc ngủ khỏi sự gián đoạn tín hiệu

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

từ tín hiệu nhập tín hiệusignal import signal

từ Sigint nhập tín hiệusignal import SIGINT

# Xử lý Sigint

Def Custom_Handler [Signum, Frame]:custom_handler[signum,frame]:

& nbsp; & nbsp; & nbsp; & nbsp; in ['có một sigint, bỏ qua ngay bây giờ ...']print['Got a SIGINT, ignoring for now...']

# Đăng ký trình xử lý tín hiệu cho Control-C

signal[SIGINT,custom_handler][SIGINT,custom_handler]

Ví dụ dưới đây cho thấy điều này, xử lý các tín hiệu điều khiển-C nếu chúng xảy ra trong khi ngủ và ngăn chặn chương trình chấm dứt.

# SuperfastPython.com['Sleeping for a moment']

# Ví dụ về bảo vệ giấc ngủ khỏi sự gián đoạn tín hiệu

sleep[5][5]

từ thời gian nhập vào giấc ngủ['All done']

từ tín hiệu nhập tín hiệu

Ví dụ:

...
All done

# Đăng ký trình xử lý tín hiệu cho Control-C

Ví dụ:

...

^C

# Đăng ký trình xử lý tín hiệu cho Control-C

Ví dụ dưới đây cho thấy điều này, xử lý các tín hiệu điều khiển-C nếu chúng xảy ra trong khi ngủ và ngăn chặn chương trình chấm dứt.

# SuperfastPython.com

# Ví dụ về bảo vệ giấc ngủ khỏi sự gián đoạn tín hiệu

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

  • từ tín hiệu nhập tín hiệu

từ Sigint nhập tín hiệu

  • # Báo cáo một tin nhắn

In ['Ngủ trong giây lát']

  • # khối
  • in ['tất cả đã hoàn thành']
  • Chạy chương trình sẽ ngủ trong năm giây và báo cáo một tin nhắn.my book!]. 

Ngủ trong một khoảnh khắc xong

  • Nếu bạn nhấn Control-C trong khi chương trình đang chạy, ví dụ: Trong khi ngủ, thì chương trình sẽ xử lý tín hiệu Sigint, báo cáo tin nhắn và sẽ tiếp tục chờ đợi cho đến khi giấc ngủ hoàn tất.
    • Ngủ trong giây lát
  • Có một sigint, bỏ qua bây giờ ...
    • Tất cả đã được làm xong
  • Đọc thêm
    • Phần này cung cấp các tài nguyên bổ sung mà bạn có thể thấy hữu ích.

API

Chủ đề - song song dựa trên luồng

Hướng dẫn
Ask your questions in the comments below and I will do my best to answer.

Python Threading: Hướng dẫn hoàn chỉnh

Bộ đếm thời gian threading trong Python là gì?

Lớp hẹn giờ Python được sử dụng để thực hiện thao tác hoặc có một chức năng chạy sau một khoảng thời gian được chỉ định đã trôi qua.Lớp luồng có một lớp con được gọi là hẹn giờ lớp.Về mặt kỹ thuật, chúng tôi sẽ tạo các đối tượng hẹn giờ khi chúng tôi cần các hành động giới hạn thời gian [phương pháp], theo thuật ngữ kỹ thuật.used to perform an operation or have a function run after a specified period has passed. The threading class has a subclass called the class timer. In technical terms, we will create Timer objects when we need time-bound actions [methods], in technical terms.

Thời gian ngủ có dừng chủ đề không?

Chức năng ngủ thời gian Python được sử dụng để thêm độ trễ trong việc thực hiện chương trình.Chúng ta có thể sử dụng chức năng ngủ Python để tạm dừng việc thực hiện chương trình trong thời gian nhất định trong vài giây.Lưu ý rằng chức năng ngủ thời gian Python thực sự chỉ dừng việc thực hiện luồng hiện tại, không phải toàn bộ chương trình.python time sleep function actually stops the execution of current thread only, not the whole program.

Bài Viết Liên Quan

Chủ Đề