Glade、python、pygtk を使用して、UDP ソケット経由で受信したリアルタイム データに応じて更新される非常に基本的な GUI を開発しています。受信したデータ パケットは 256 ミリ秒ごとに送信されます。私が理解しているように、データの受信中に GUI の応答性を維持するには、スレッドを使用してこのデータを受信する必要があります。その結果、GUI は開きますが、UDP (dpmserver スレッド) から OP を取得できません。 . dpmserver モジュールを個別に試してみましたが、正常に動作します。私はスレッド化が初めてです。実際、これはPythonでスレッドを使用した最初のプログラムです。GUI の応答性を維持しながらデータを受信するにはどうすればよいですか? コードは次のとおりです。
TMSTART=41
PACKETSIZE=133
FIELD=9
TMEND=(PACKETSIZE-1)-FIELD
import socket
import sys
import string
import os.path
import urllib2
import string
import linecache
from pprint import pprint,pformat
import threading
try:
import pygtk
pygtk.require("2.0")
except:
print "You need to install pyGTK or GTKv2 or set your PYTHONPATH correctly"
sys.exit(1)
import gtk
import gtk.glade
def procpack(data):
TMlist=[]
for i in range(TMSTART,TMEND,FIELD):
field=data[i+1:i+FIELD+1]
try:
if field=='\x00\x00\x00\x00\x00\x00\x00\x00\x00':
return TMlist
except:
pass
TMlist.append([field[0:8],field[8]])
def dpmserver():
server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server_socket.bind(("", 5123))
print"UDPServer Waiting for client on port 5123"
bytestack=[];
while 1:
data, address = server_socket.recvfrom(512)
print "( " ,address[0], " " , address[1] , " ) said : ", data," length:",len(data)
print procpack(data)
class AppParafin:
def __init__(self):
self.gladefile = 'dpm.glade'
windowname = 'Deployment Monitor'# This must match the window name in glade
self.wTree = gtk.glade.XML(self.gladefile, windowname)# object for acessing widgets
t=threading.Thread(target=dpmserver)
t.start()
self.op=self.wTree.get_widget('Deployment Monitor')
self.op.show()
app = AppParafin()
gtk.main()