相关疑难解决方法(0)

Python退出命令 - 为什么这么多,何时应该使用?

似乎python支持许多不同的命令来停止脚本执行.
我发现的选择是: quit(),exit(),sys.exit(),os._exit()

我错过了吗?他们之间有什么区别?你什么时候用?

python

435
推荐指数
4
解决办法
58万
查看次数

无法使用Ctrl-C终止Python脚本

我正在使用以下脚本测试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如此坚持被忽视?我该如何解决这个问题?

python linux

109
推荐指数
3
解决办法
8万
查看次数

Python中的可中断线程连接

有没有办法等待终止线程,但仍然拦截信号?

考虑以下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)

python multithreading

23
推荐指数
2
解决办法
1万
查看次数

Python空闲和KeyboardInterrupts

Idle中的KeyboardInterrupts 90%的时间都在为我工作,但我想知道他们为什么不总是工作.在空闲时,如果我这样做

import time
time.sleep(10)
Run Code Online (Sandbox Code Playgroud)

然后使用Ctrl + C尝试使用KeyboardInterrupt,直到睡眠10秒后才会中断该过程.

相同的代码和通过Ctrl + C的KeyboardInterrupt立即在shell中工作.

python python-idle

11
推荐指数
1
解决办法
4277
查看次数

带线程的Python程序无法捕获CTRL + C.

我正在编写一个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并终止脚本的任何建议.

python multithreading

9
推荐指数
2
解决办法
1万
查看次数

使用threading.Timer时,Ctrl-C不起作用

我正在Windows上编写一个多线程Python应用程序.

我曾经使用过终止应用程序ctrl-c,但是一旦我添加了threading.Timer实例ctrl-c停止工作(或者有时需要很长时间).

怎么会这样?
具有Timer线程和ctrl-c?之间的关系是什么?

更新:
我在Python的线程文档中发现了以下内容:

线程与中断奇怪地交互:KeyboardInterrupt异常将由任意线程接收.(当信号模块可用时,中断始终转到主线程.)

python multithreading timer

6
推荐指数
1
解决办法
3598
查看次数

Python线程:同时运行2个不同的函数

我有一个功能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 multithreading

4
推荐指数
1
解决办法
8607
查看次数

Python - 1程序,在不同的端口上发送和接收但是相同的主机,是否可能?

使用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)

python sockets udp localhost

4
推荐指数
1
解决办法
4203
查看次数

标签 统计

python ×8

multithreading ×4

linux ×1

localhost ×1

python-idle ×1

sockets ×1

timer ×1

udp ×1