python多进程控制gui界面_Python优雅地终止了多进程和gui进程

本文介绍了一个使用Python和Glade创建GUI的应用程序,该程序通过多进程与服务器进行套接字通信。当在GUI中点击'send'按钮时,文本框的内容被发送到服务器,然后服务器将数据回传。然而,当关闭GUI时,相关进程并未终止。问题可能在于进程的管理方式。文中提供了主.py、handler.py、server.py和client.py四个文件的代码片段,展示了如何启动GUI进程和处理信号。
摘要由CSDN通过智能技术生成

我使用glade作为我的gui并创建一个进程来运行我的gui。单击此应用程序将打开套接字。当我按下'send'时,它将把textfield中的任何内容发送到套接字。套接字接收这些数据并将其发回。问题是在我把数据发送到套接字之后,线程没有终止。在我关闭图形用户界面后,它还调用系统出口()但也会离开进程并且不会终止。我认为错误在于我如何实现我的流程或我的所有流程。有人能照一下这个吗?这也与我上一篇文章有关。谢谢

在主.py在

//为我的gui创建新进程并显示它的主线程import socket, thread, gtk, Handler, sys, os, multiprocessing

sys.setrecursionlimit(10000)

if __name__ == '__main__':

builder = gtk.Builder()

#32bit template.glade 64bit template-2.22

# @todo add switching between architectures

#

builder.add_from_file("template/template-2.22.glade")

builder.connect_signals(Handler.Handler(builder))

window = builder.get_object("window1")

window.show_all()

try:

p = multiprocessing.Process(target=gtk.main())

p.start()

except:

print "Error Starting new Thread"

在处理程序.py在

//gtk glade信号的处理程序,创建新线程和句柄按钮等

^{pr2}$

在服务器.py在

//打开一个套接字,监听传入的数据并发送回import socket,multiprocessing, gtk, sys

class Server:

'''

classdocs

'''

def __init__(self):

'''

Constructor

'''

def run(self):

try:

while 1:

HOST = 'localhost' # Symbolic name meaning the local host

PORT = 50006 # Arbitrary non-privileged port

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

s.bind((HOST, PORT))

s.listen(5)

conn, addr = s.accept()

print 'Connected by', addr

while True:

data = conn.recv(1024)

if not data:

conn.close()

sys.exit()

break

elif data != '':

conn.sendall(data)

break

print "Closing"

#conn.close()

finally:

print "End"

pass

在客户端.py在

//将文本区域内的内容发送到套接字import time

class MyClass:

'''

classdocs

'''

def __init__(self):

'''

Constructor

'''

def run(self,text):

try:

import socket

HOST = 'localhost' # The localhost

PORT = 50006 # The same port as used by the server

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.connect((HOST, PORT))

s.send(text)

data = s.recv(1024)

while 1:

if data != '':

print 'Received', repr(data)

break

finally:

pass

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值