Python signal processing signal module
Introduction to the signal module
Recently I was reading about Linux signal. Signal can be used for inter-process communication and asynchronous processing. The Python standard library provides the signal package that can be used to handle signals. What is discussed here is the signal module of Python in Unix systems.
Simple example of signal
There is such an example in the official documentation:
import signal, os # 定义一个信号处理函数,该函数打印收到的信号,然后raise IOError def handler(signum, frame): print 'Signal handler called with signal', signum raise IOError("Couldn't open device!") # 对SIGALRM(终止)设置处理的handler, 然后设置定时器,5秒后触发SIGALRM信号 signal.signal(signal.SIGALRM, handler) signal.alarm(5) # This open() may hang indefinitely fd = os.open('/dev/ttyS0', os.O_RDWR) signal.alarm(0) # 关闭定时器
The function implemented by this example is to prevent an error in opening a file or other exceptions from being in a waiting state, set a timer, and trigger it after 5 seconds IOError. If the file is opened normally within 5 seconds, the timer is cleared.
signal description
Basic signal name
import signal signal.SIGABORT signal.SIGHUP # 连接挂断 signal.SIGILL # 非法指令 signal.SIGINT # 连接中断 signal.SIGKILL # 终止进程(此信号不能被捕获或忽略) signal.SIGQUIT # 终端退出 signal.SIGTERM # 终止 signal.SIGALRM # 超时警告 signal.SIGCONT # 继续执行暂停进程 等等...
Commonly used signal processing functions
signal.signal(signalnum, handler)
Set the signal processing function
signal.alarm(time)
Set the SIGALRM signal to be sent Timer
os.kill
This does not belong to the signal module, but it can be used to send a signal to a certain process
signal usage example
Example 1
# From project httpscreenshot-master, under directory , in source file httpscreenshot.py. def timeoutFn(func, args=(), kwargs={}, timeout_duration=1, default=None): import signal class TimeoutError(Exception): pass def handler(signum, frame): raise TimeoutError() # set the timeout handler signal.signal(signal.SIGALRM, handler) signal.alarm(timeout_duration) try: result = func(*args, **kwargs) except TimeoutError as exc: result = default finally: signal.alarm(0) signal.signal(signal.SIGALRM, signal.SIG_DFL) return result
The above example implements setting the function execution timeout and returning to the default Result function. First, a timeout processing function is set up and a custom exception is thrown in the function. Set signal.alarm before executing the function. When the time is exceeded, the exception SIGALRM is triggered. Then the exception is captured and the default value is set. Finally, the cleanup work is done to cancel the timer and the processing of SIGALRM is set to default.
Example 2
This example comes from here. The requirement is to dynamically load modules imported by python, that is, when the imported module code is updated, it is hoped that the referenced code can be updated immediately. An example is as follows:
# lib.py def scrape_me_bro(): print "Scraping is fun" #scrape.py import time import signal import lib def scrape(): # Assume we are hitting Streaming API # and doing something buzzwordy with it while True: lib.scrape_me_bro() time.sleep(2) def reload_libs(signum, frame): print "Received Signal: %s at frame: %s" % (signum, frame) print "Excuting a Lib Reload" reload(lib) # Register reload_libs to be called on restart signal.signal(signal.SIGHUP, reload_libs) # Main scrape()
When scrape.py is run, the program will call the scrape_me_bro() method in lib.py every two seconds. At this time, if the method in lib.py changes, the process of running scrape.py will be called. Send the SIGHUP signal, then it will reload lib.py, which will then loop to execute the modified scrape_me_bro() method.

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

Solution to permission issues when viewing Python version in Linux terminal When you try to view Python version in Linux terminal, enter python...

When using Python's pandas library, how to copy whole columns between two DataFrames with different structures is a common problem. Suppose we have two Dats...

Alternative usage of Python parameter annotations In Python programming, parameter annotations are a very useful function that can help developers better understand and use functions...

Getting started with Python: Hourglass Graphic Drawing and Input Verification This article will solve the variable definition problem encountered by a Python novice in the hourglass Graphic Drawing Program. Code...

Exploration of cracking verification codes using Python In daily network interactions, verification codes are a common security mechanism to prevent malicious manipulation of automated programs...

How do Python scripts clear output to cursor position at a specific location? When writing Python scripts, it is common to clear the previous output to the cursor position...

Choice of Python Cross-platform desktop application development library Many Python developers want to develop desktop applications that can run on both Windows and Linux systems...

In Python, how to dynamically create an object through a string and call its methods? This is a common programming requirement, especially if it needs to be configured or run...
