似乎python支持许多不同的命令来停止脚本执行.
我发现的选择是: quit(),exit(),sys.exit(),os._exit()
我错过了吗?他们之间有什么区别?你什么时候用?
我正在使用以下脚本测试Python线程:
import threading
class FirstThread (threading.Thread):
def run (self):
while True:
print 'first'
class SecondThread (threading.Thread):
def run (self):
while True:
print 'second'
FirstThread().start()
SecondThread().start()
Run Code Online (Sandbox Code Playgroud)
这是在Kubuntu 11.10上的Python 2.7中运行的.Ctrl+ C不会杀了它.我也尝试为系统信号添加处理程序,但这没有帮助:
import signal
import sys
def signal_handler(signal, frame):
sys.exit(0)
signal.signal(signal.SIGINT, signal_handler)
Run Code Online (Sandbox Code Playgroud)
为了杀死进程,我在用Ctrl+ 发送程序到后台后通过PID将其杀死Z,这是不被忽略的.为什么Ctrl+ C如此坚持被忽视?我该如何解决这个问题?
有没有办法等待终止线程,但仍然拦截信号?
考虑以下C程序:
#include <signal.h>
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <pthread.h>
#include <stdlib.h>
void* server_thread(void* dummy) {
sleep(10);
printf("Served\n");
return NULL;
}
void* kill_thread(void* dummy) {
sleep(1); // Let the main thread join
printf("Killing\n");
kill(getpid(), SIGUSR1);
return NULL;
}
void handler(int signum) {
printf("Handling %d\n", signum);
exit(42);
}
int main() {
pthread_t servth;
pthread_t killth;
signal(SIGUSR1, handler);
pthread_create(&servth, NULL, server_thread, NULL);
pthread_create(&killth, NULL, kill_thread, NULL);
pthread_join(servth, NULL);
printf("Main thread finished\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它在一秒后结束并打印:
Killing
Handling 10 …Run Code Online (Sandbox Code Playgroud) Idle中的KeyboardInterrupts 90%的时间都在为我工作,但我想知道他们为什么不总是工作.在空闲时,如果我这样做
import time
time.sleep(10)
Run Code Online (Sandbox Code Playgroud)
然后使用Ctrl + C尝试使用KeyboardInterrupt,直到睡眠10秒后才会中断该过程.
相同的代码和通过Ctrl + C的KeyboardInterrupt立即在shell中工作.
我正在编写一个python脚本,需要运行一个侦听网络套接字的线程.
我使用以下代码使用Ctrl+ 杀死它时遇到了麻烦c:
#!/usr/bin/python
import signal, sys, threading
THREADS = []
def handler(signal, frame):
global THREADS
print "Ctrl-C.... Exiting"
for t in THREADS:
t.alive = False
sys.exit(0)
class thread(threading.Thread):
def __init__(self):
self.alive = True
threading.Thread.__init__(self)
def run(self):
while self.alive:
# do something
pass
def main():
global THREADS
t = thread()
t.start()
THREADS.append(t)
if __name__ == '__main__':
signal.signal(signal.SIGINT, handler)
main()
Run Code Online (Sandbox Code Playgroud)
欣赏有关如何捕获Ctrl+ c并终止脚本的任何建议.
我正在Windows上编写一个多线程Python应用程序.
我曾经使用过终止应用程序ctrl-c,但是一旦我添加了threading.Timer实例ctrl-c停止工作(或者有时需要很长时间).
怎么会这样?
具有Timer线程和ctrl-c?之间的关系是什么?
线程与中断奇怪地交互:KeyboardInterrupt异常将由任意线程接收.(当信号模块可用时,中断始终转到主线程.)
我有一个功能foo,只有在满足条件后才会停止.在foo运行时,我需要一直询问用户输入(不断询问用户输入).我希望它们分开运行而不会相互干扰.
在下面的示例中,foo继续打印"Hello"并getUserInput继续查找用户输入.即使我没有为用户输入输入任何内容,我也希望foo继续打印你好.只要用户没有输入字母'e',它就会一直询问输入.我有以下尝试:
import threading
from time import sleep
class test:
def __init__(self):
self.running = True
def foo(self):
while(self.running):
print 'Hello\n'
sleep(2)
def getUserInput(self):
x = ''
while(x != 'e'):
x = raw_input('Enter value: ')
self.running = False
def go(self):
th1 = threading.Thread(target=self.foo)
th2 = threading.Thread(target=self.getUserInput)
th1.start()
th2.start()
t = test()
t.go()
Run Code Online (Sandbox Code Playgroud)
我的代码打印出第一个问候语并要求输入,但之后没有任何内容.我究竟做错了什么?感谢您的帮助.
使用Python,是否可以在本地主机和某个端口上发送UDP数据,然后在同一程序内同时监听本地主机上的不同端口?我一直在使用错误48'地址已经在使用'并尝试使用python的重用地址,虽然我很确定它无论如何都不适用于这个应用程序.
背景:我对软件开发一无所知,更不用说Python,这只是某人在工作中要求的东西.
我感谢任何帮助.
from threading import Thread
import time
import socket
HOST = 'localhost'
PORT = 5455
PORT1 = 5457
data1 = "1"
s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind((HOST,PORT1))
a = 0
def myfunction(string, *args):
while 1:
cmd = int( raw_input("send message: ") )
if (cmd == 1):
s.sendto(data1, (HOST,PORT))
time.sleep(1)
def myfunction2(string, *args):
while 1:
print s.recv(30)
time.sleep(.5)
if __name__=='__main__':
try:
Thread(target=myfunction, args=(a, 1)).start()
Thread(target=myfunction2, args=(a, 1)).start()
except Exception, errtxt:
print errtxt
Run Code Online (Sandbox Code Playgroud)