❶ python中创建自定义函数的关键字
打开IDLE python GUI,点击开始-所有程序-python2.7-IDLE python GUI,或者直接进入dos环境,或者其他的IDLE。
❷ python实现了多线程,如果使用了命令kill把正在运行的进程kill掉的话,可能某些线程会出错,怎么解决
主线程捕获kill的信号以后去终止其他线程, 等其他线程完成以后, 再在主线程中退出.
不过更现代的实现并发的方法是使用异步, 而不是多线程.
❸ python 怎么杀死指定线程名的线程
这几天在实践的时候,有一个问题一直在困扰我,比如timer,定时器,Python没有这么好的机制,需要自己实现。这个网上也是有一些。但是我自己的需求可能并不一样。
需求:
我需要一个函数工作,比如远程连接一个端口,远程读取文件等,但是我给的时间有限,比如,4秒钟如果你还没有读取完成或者连接成功,我就不等了,很可能对方已经宕机或者拒绝了。这样可以批量做一些事情而不需要一直等,浪费时间。
定时器是最好的,我觉得这个需求,一旦定时过了,就将这个读取函数直接kill。但是这出现了问题。
第一,怎么定时?
第二,时间到了,怎么kill函数
第三,定时函数和kill函数怎么判断该kill了。
写一个多线程,一个线程专门用来计时间,一个用来执行函数,一旦时间到了,就杀死执行函数的线程。我在多线程,python很弱,似乎没有这样的比较简单的一个接口就调用的。不像windows编程。那么,该怎办?
结合我的需求,我这么做:
1、在主进程执行,调用一个进程执行函数,然后主进程sleep,等时间到了,就kill 执行函数的进程。
测试一个例子:
[python] view plain
import time
import threading
def p(i):
print i
class task(threading.Thread):
def __init__(self,fun,i):
threading.Thread.__init__(self)
self.fun = fun
self.i = i
self.thread_stop = False
def run(self):
while not self.thread_stop:
self.fun(self.i)
def stop(self):
self.thread_stop = True
def test():
thread1 = task(p,2)
thread1.start()
time.sleep(4)
thread1.stop()
❹ python 函数后加大括号啥意思
existKill函数会返回一个可迭代对象,后面的带数字中括号是对其内部元素的引用
❺ 退出python环境应该输入什么
我们这里使用的是python3.6版本,我们先确认python版本及python正常工作。如下面图中所示,python版本是3.6.5,可以正常登陆。
❻ 在python tkinter中用什么函数可以关掉一个窗口
好象调用一次主窗口的close似乎就可以。或者是app的close, 或者是destroy或者是terminate,不记得是哪个函数了。
当然你杀掉自己也是可以的。 用kill。 或者是sys.exit也应该可以。
❼ python问题 我想保护一个进程让psutil库中的kill方法不能kill这个进程,求解答
kill通常是通过发送信号结束进程的,对psutil不太熟悉,你可以看看他的源码看看发送的是什么信号,然后你在python里对那些信号做处理就好了
❽ python哪个函数启动进程和关闭进程
任何一种编程语言,启动进程和关闭进程都是跟操作系统相关的操作,python中与操作系统打交道的话,推荐使用os模块。
os.system() 函数可以启动一个进程,执行完之后返回状态码。
os.fork() 复制一个进程,如果是子进程返回0,如果是父进程返回子进程的pid,使用这个函数的时候,建议你学习一下linux编程的知识。
os.popen 以管道的方式创建进程。
os.spawnl 也可以创建进程,并能指定环境变量。
os.kill(pid, sig) 关闭一个进程,pid是进程号,sig是信号。与fork配合使用,例如你刚才用fork创建了一个子进程,它的pid是11990, 那么调用
os.kill( 11990, signal.CTRL_BREAK_EVENT)
就以ctrl+c的方式杀死了这个进程。
另外还有一个模块multiprocessing,这个模块封装了很多创建进程和进程间通信的操作,可以让你发挥多核的威力。
❾ 如何使用python处理心音信号
在了解了Linux的信号基础之 后,Python标准库中的signal包就很容易学习和理解。signal包负责在Python程序内部处理信号,典型的操作包括预设信号处理函数,暂 停并等待信号,以及定时发出SIGALRM等。要注意,signal包主要是针对UNIX平台(比如Linux, MAC OS),而Windows内核中由于对信号机制的支持不充分,所以在Windows上的Python不能发挥信号系统的功能。
信号(signal)-- 进程之间通讯的方式,是一种软件中断。一个进程一旦接收到信号就会打断原来的程序执行流程来处理信号。
定义信号名
signal包定义了各个信号名及其对应的整数,比如:
import signal
print(signal.SIGABRT)
print(signal.SIG_DFL)
Python所用的信号名与Linux一致,可以通过$ man 7 signal 查询
预设信号处理函数
signal包的核心是使用signal.signal()函数来预设(register)信号处理函数,如下所示:
singnal.signal(signalnum, handler)
signalnum为某个信号,handler为该信号的处理函数。我们在信号基础里提到,进程可以无视信号,可以采取默认操作,还可以自定义操作。当handler为signal.SIG_IGN时,信号被无视(ignore)。当handler为singal.SIG_DFL,进程采取默认操作(default)。当handler为一个函数名时,进程采取函数中定义的操作。
import signal
# Define signal handler function
def myHandler(signum, frame):
print('I received: ', signum)
# register signal.SIGTSTP's handler
signal.signal(signal.SIGTSTP, myHandler)
signal.pause()
print('End of Signal Demo')
# 有问题待测试
在主程序中,我们首先使用signal.signal()函数来预设信号处理函数。然后我们执行signal.pause()来让该进程暂停以等待信号, 以等待信号。当信号SIGUSR1被传递给该进程时,进程从暂停中恢复,并根据预设,执行SIGTSTP的信号处理函数myHandler()。 myHandler的两个参数一个用来识别信号(signum),另一个用来获得信号发生时,进程栈的状况(stack frame)。这两个参数都是由signal.singnal()函数来传递的。
上面的程序可以保存在一个文件中(比如test.py)。我们使用如下方法运行:
$python test.py
以便让进程运行。当程序运行到signal.pause()的时候,进程暂停并等待信号。此时,通过按下CTRL+Z向该进程发送SIGTSTP信号。我们可以看到,进程执行了myHandle()函数, 随后返回主程序,继续执行。(当然,也可以用$ps查询process ID, 再使用$kill来发出信号。)
(进程并不一定要使用signal.pause()暂停以等待信号,它也可以在进行工作中接受信号,比如将上面的signal.pause()改为一个需要长时间工作的循环。)
我们可以根据自己的需要更改myHandler()中的操作,以针对不同的信号实现个性化的处理。
定时发出SIGALRM信号
一个有用的函数是signal.alarm(),它被用于在一定时间之后,向进程自身发送SIGALRM信号:
import signal
# Define signal handler function
def myHandler(signum, frame):
print("Now, it's the time")
exit()
# register signal.SIGALRM's handler
signal.signal(signal.SIGALRM, myHandler)
signal.alarm(5)
while True:
print('not yet')
我们这里用了一个无限循环以便让进程持续运行。在signal.alarm()执行5秒之后,进程将向自己发出SIGALRM信号,随后,信号处理函数myHandler开始执行。
发送信号
signal包的核心是设置信号处理函数。除了signal.alarm()向自身发送信号之外,并没有其他发送信号的功能。但在os包中,有类似于linux的kill命令的函数,分别为
os.kill(pid, sid)
os.killpg(pgid, sid)
分别向进程和进程组(见Linux进程关系)发送信号。sid为信号所对应的整数或者singal.SIG*。
实际上signal, pause,kill和alarm都是Linux应用编程中常见的C库函数,在这里,我们只不过是用Python语言来实现了一下。实际上,Python 的解释器是使用C语言来编写的,所以有此相似性也并不意外。此外,在Python 3.4中,signal包被增强,信号阻塞等功能被加入到该包中。我们暂时不深入到该包中。
总结
signal.SIG*
signal.signal()
signal.pause()
signal.alarm()