我有一个Python程序,当我使用退出应用程序时 Ctrl-c
,脚本不会关闭。我的过程仍显示在运行的过程中。
#!/usr/bin/env python
import socket
import threading
import Queue
import serial
import mysql.connector
from datetime import datetime, date, time
host = '0.0.0.0'
port = 1024
buffer = 102400
my_queue = Queue.Queue()
class readFromUDPSocket(threading.Thread):
def __init__(self, my_queue):
threading.Thread.__init__(self)
self.my_queue = my_queue
def run(self):
while True:
buffer1,addr = socketUDP.recvfrom(buffer)
self.my_queue.put(buffer1)
print 'UDP received'
class readFromSerial(threading.Thread):
def __init__(self, my_queue):
threading.Thread.__init__(self)
self.my_queue = my_queue
def run(self):
while True:
buffer2 = ser.readline(eol=';')
if buffer2:
self.my_queue.put(buffer2)
print 'Serial received'
class process(threading.Thread):
def __init__(self, my_queue):
threading.Thread.__init__(self)
self.my_queue = my_queue
self.alive = threading.Event()
self.alive.set()
def run(self):
while True:
buffer3 = self.my_queue.get()
today = datetime.now()
timestamp = today.strftime("%A, %B %d, %Y %H:%M:%S")
print 'Data pushed at:', timestamp
print buffer3
if buffer3.startswith('temp:'):
temp = buffer3.replace('temp:','')
cnx = mysql.connector.connect(user='root', password='xxxxx', database='temperature')
cursor = cnx.cursor()
cursor.execute("INSERT INTO temperature.temperature (time,temperature) VALUES (%s, %s)", [timestamp, temp])
print 'Data inserted into Database'
cnx.commit()
cursor.close()
cnx.close()
if __name__ == '__main__':
# Create socket (IPv4 protocol, datagram (UDP)) and bind to address
socketUDP = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
socketUDP.bind((host, port))
ser = serial.Serial('/dev/ttyUSB0', 57600, timeout=2)
# Instantiate & start threads
myServer = readFromUDPSocket(my_queue)
mySerial = readFromSerial(my_queue)
myDisplay = process(my_queue)
myServer.start()
myDisplay.start()
mySerial.start()
while 1:
pass
UDPSock.close()
ser.close()
为什么python线程不能关闭Ctrl+c
?
您需要将该线程设为守护程序线程。为此,请在调用线程的init之后添加以下行
self.setDaemon(True)
当只有守护程序线程处于活动状态时,程序将退出,主线程当然是非守护程序的
问题内容: 我正在尝试编写一个程序,该程序在循环中创建新线程,而不等待它们完成。据我了解,如果我在线程上使用.start(),则我的主循环应继续执行,而另一个线程将关闭并同时执行其工作 但是,一旦我的新线程启动,循环就会阻塞,直到线程完成为止。我是否误解了python中线程的工作方式,还是我正在做一些愚蠢的事情。 这是我用于创建新线程的代码。 谢谢大家 问题答案: 这将调用该函数并将其 结果 传递
本文向大家介绍理解python多线程(python多线程简明教程),包括了理解python多线程(python多线程简明教程)的使用技巧和注意事项,需要的朋友参考一下 对于python 多线程的理解,我花了很长时间,搜索的大部份文章都不够通俗易懂。所以,这里力图用简单的例子,让你对多线程有个初步的认识。 单线程 在好些年前的MS-DOS时代,操作系统处理问题都是单任务的,我想做听音乐和看电影两
我正在为我的公司开发一个“多层”GUI来监控温度和状态。因为我是python编程新手,所以我的代码需要一些帮助。 代码由类构成。“Main”初始化主窗口(tkinter)并创建其他要显示的帧(如果需要)。除“canvas”外,其他每个类都是一个框架,它将显示不同的内容。 每个画布都包含一个图像和一些文本/可变文本。线程用于从数据库获取数据并更改画布中的文本。 每次线程访问画布并尝试更改文本或创建新
我从主线程调用了下面的代码,使用ExecutorService池并启动一个线程来处理找到的每个文件。我正在尝试了解当主线程被kill命令终止时ExecutorService的行为。生成的线程会发生什么?一旦完成工作,它们会立即被杀还是终止? 还有没有更好/更安全的方法来编写下面的代码段,特别是如果我在无限循环中运行这部分,例如等待文件被放到输入目录并分配线程来处理它们?在这种情况下,我应该创建一个
问题内容: Python中的和模块之间有什么区别? 问题答案: 在Python 3中,已重命名为。它是用于实现的基础结构代码,普通的Python代码不应该靠近它。 公开了底层操作系统级别流程的原始视图。这几乎绝不是您想要的,因此在Py3k中重命名以表明它实际上只是实现细节。 添加了一些额外的自动记帐功能,以及一些便捷实用程序,所有这些使它成为标准Python代码的首选。