Maison développement back-end Tutoriel Python wxpython中利用线程防止假死的实现方法

wxpython中利用线程防止假死的实现方法

Jun 06, 2016 am 11:32 AM
wxpython 假死 线程

前段时间我编写了一个工业控制的软件,在使用中一直存在一个问题,就是当软件检索设备时,因为这个功能执行的时间比较长,导致GUI界面假死,让用户分辨不清楚软件到底仍在执行,还是真的挂掉了。(虽然我设计了同步log显示,但是这个也同样假死了)

程序截图如下:

代码解析如下:

# -*- coding: utf-8 -*-
 
import time
import wx
from threading import Thread
from wx.lib.pubsub import Publisher

Copier après la connexion

time库用来执行定时函数,模拟需要长时间执行的功能。Publisher用来在线程间传输消息。

class TestThread(Thread):
 def __init__(self):
  #线程实例化时立即启动
  Thread.__init__(self)
  self.start()
 def run(self):
  #线程执行的代码
  for i in range(101):
   time.sleep(0.03)
   wx.CallAfter(Publisher().sendMessage, "update", i)
  time.sleep(0.5)
  wx.CallAfter(Publisher().sendMessage, "update", u"线程结束")
Copier après la connexion


TestThread的__init__函数,定义线程实例化时就启动,run函数就是需要长时间执行的程序。
wx.CallAfter与Publisher().sendMessage用来向GUI发送消息。

class MyForm ( wx.Frame ):
 def __init__( self, parent ):
  wx.Frame.__init__ ( self, parent, id = wx.ID_ANY, title = u"Leniy,20140627", pos = wx.DefaultPosition, size = wx.Size( -1,-1 ), style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL )
  self.SetSizeHintsSz( wx.DefaultSize, wx.DefaultSize )
  gSizer2 = wx.GridSizer( 0, 3, 0, 0 )
  self.m_button2 = wx.Button( self, wx.ID_ANY, u"执行线程", wx.DefaultPosition, wx.DefaultSize, 0 )
  gSizer2.Add( self.m_button2, 0, wx.ALL|wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL, 5 )
  self.m_staticText2 = wx.StaticText( self, wx.ID_ANY, u"MyLabel", wx.DefaultPosition, wx.DefaultSize, 0 )
  self.m_staticText2.Wrap( -1 )
  gSizer2.Add( self.m_staticText2, 0, wx.ALL|wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL, 5 )
  self.m_gauge1 = wx.Gauge( self, wx.ID_ANY, 100, wx.DefaultPosition, wx.DefaultSize, wx.GA_HORIZONTAL )
  self.m_gauge1.SetValue( 0 ) 
  gSizer2.Add( self.m_gauge1, 0, wx.ALL|wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL, 5 )
  self.SetSizer( gSizer2 )
  self.Layout()
  gSizer2.Fit( self )
  self.Centre( wx.BOTH )
  self.m_button2.Bind( wx.EVT_BUTTON, self.onButton )
  Publisher().subscribe(self.updateDisplay, "update")
 def updateDisplay(self, msg):
  t = msg.data
  if isinstance(t, int):#如果是数字,说明线程正在执行,显示数字
   self.m_staticText2.SetLabel("%s%%" % t)
   self.m_gauge1.SetValue( t )
  else:#否则线程未执行,将按钮重新开启
   self.m_staticText2.SetLabel("%s" % t)
   self.m_button2.Enable()
 def onButton( self, event ):
  TestThread()
  self.m_staticText2.SetLabel(u"线程开始")
  event.GetEventObject().Disable()

Copier après la connexion

这个就是GUI的主程序,__init__中使用Publisher().subscribe(self.updateDisplay, “update”)声明了获取线程消息以及显示的方法。

if __name__ == "__main__":
 app = wx.PySimpleApp()
 MyForm(None).Show()
 app.MainLoop()
Copier après la connexion

最后将窗口MyForm(None).Show()显示出来,程序就完成了。

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Où trouver la courte de la grue à atomide atomique
1 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Que signifient 8 cœurs et 16 threads ? Que signifient 8 cœurs et 16 threads ? Feb 02, 2023 am 11:26 AM

8 cœurs signifie que le processeur possède 8 cœurs physiques et 16 threads signifie que le processeur peut avoir jusqu'à 16 threads traitant des tâches en même temps. Le nombre de cœurs et de threads sont des indicateurs de performances importants d'un processeur d'ordinateur. Plus le nombre de cœurs du processeur est élevé, plus la vitesse de traitement est élevée, plus le nombre de threads est élevé, plus il est propice à l'exécution de plusieurs programmes en même temps. car le nombre de threads est équivalent au nombre de fois que le CPU peut s'exécuter en même temps à un certain moment. Le nombre de tâches à traiter en parallèle. Le multithreading peut maximiser le traitement superscalaire désordonné à grande échelle, améliorer l'utilisation des composants informatiques du processeur et réduire les retards d'accès à la mémoire causés par la corrélation des données ou les échecs de cache.

Programmation GUI Python : démarrez rapidement et créez facilement des interfaces interactives Programmation GUI Python : démarrez rapidement et créez facilement des interfaces interactives Feb 19, 2024 pm 01:24 PM

Une brève introduction à la programmation GUI python L'interface graphique (Graphical User Interface, interface utilisateur graphique) est un moyen qui permet aux utilisateurs d'interagir graphiquement avec les ordinateurs. La programmation GUI fait référence à l'utilisation de langages de programmation pour créer des interfaces utilisateur graphiques. Python est un langage de programmation populaire qui fournit une riche bibliothèque GUI, ce qui rend la programmation GUI Python très simple. Introduction à la bibliothèque GUI Python Il existe de nombreuses bibliothèques GUI en Python, dont les plus couramment utilisées sont : Tkinter : Tkinter est la bibliothèque GUI fournie avec la bibliothèque standard Python. Elle est simple et facile à utiliser, mais ses fonctions sont limitées. PyQt : PyQt est une bibliothèque graphique multiplateforme dotée de fonctions puissantes.

Programmation simultanée C++ : comment éviter la famine des threads et l'inversion des priorités ? Programmation simultanée C++ : comment éviter la famine des threads et l'inversion des priorités ? May 06, 2024 pm 05:27 PM

Pour éviter la pénurie de threads, vous pouvez utiliser des verrous équitables pour garantir une allocation équitable des ressources ou définir des priorités de thread. Pour résoudre l'inversion de priorité, vous pouvez utiliser l'héritage de priorité, qui augmente temporairement la priorité du thread contenant la ressource ; ou utiliser la promotion de verrouillage, qui augmente la priorité du thread qui nécessite la ressource.

Programmation simultanée C++ : comment terminer et annuler un thread ? Programmation simultanée C++ : comment terminer et annuler un thread ? May 06, 2024 pm 02:12 PM

Les mécanismes de terminaison et d'annulation de thread en C++ incluent : Terminaison de thread : std::thread::join() bloque le thread actuel jusqu'à ce que le thread cible termine son exécution ; std::thread::detach() détache le thread cible de la gestion des threads. Annulation de thread : std::thread::request_termination() demande au thread cible de terminer l'exécution ; std::thread::get_id() obtient l'ID du thread cible et peut être utilisé avec std::terminate() pour terminer immédiatement la cible. fil de discussion. En combat réel, request_termination() permet au thread de décider du moment de la fin, et join() garantit que sur la ligne principale

Programmation GUI Python : démarquez vos programmes Programmation GUI Python : démarquez vos programmes Feb 19, 2024 pm 08:33 PM

Introduction à la programmation pythonGUI La programmation PythonGUI, c'est-à-dire la programmation d'interface utilisateur graphique, est le processus de création d'interfaces de programme d'application à l'aide du langage Python. Les applications GUI comportent généralement des éléments tels que des fenêtres, des boutons, des zones de texte, des menus, etc., grâce auxquels les utilisateurs peuvent interagir avec le programme. La programmation GUI Python présente de nombreux avantages. Premièrement, cela peut rendre votre programme plus beau et plus facile à utiliser. Deuxièmement, il peut rendre votre programme multiplateforme, c'est-à-dire qu'il peut fonctionner sur différents systèmes d'exploitation. Troisièmement, cela peut rendre votre programme plus flexible et plus facile à étendre. Bibliothèques d'interface graphique Python couramment utilisées En Python, il existe de nombreuses bibliothèques d'interface graphique couramment utilisées, notamment Tkinter, PyQt, wxPython et PyG.

Erreur Java : erreur de blocage du thread JavaFX, comment la gérer et l'éviter Erreur Java : erreur de blocage du thread JavaFX, comment la gérer et l'éviter Jun 24, 2023 pm 05:52 PM

Lors du développement d'applications JavaFX, nous rencontrons souvent des erreurs de blocage de thread JavaFX. Ces erreurs varient en gravité et peuvent nuire à la stabilité et aux performances du programme. Afin de garantir le fonctionnement normal du programme, nous devons comprendre les causes et les solutions des erreurs de blocage de thread JavaFX, et comment éviter que cette erreur ne se produise. 1. La cause de l'erreur de blocage de thread JavaFX. JavaFX est un cadre d'application d'interface utilisateur multithread, qui permet aux programmes de s'exécuter pendant une longue période dans les threads d'arrière-plan.

Quelle est la plus petite unité de flux d'instructions lorsqu'un programme est en cours d'exécution ? Quelle est la plus petite unité de flux d'instructions lorsqu'un programme est en cours d'exécution ? Aug 23, 2022 pm 02:16 PM

"Thread" est la plus petite unité de flux d'instructions lorsqu'un programme est en cours d'exécution. Un processus fait référence à un programme avec certaines fonctions indépendantes, et un thread fait partie du processus, décrivant l'état d'exécution du flux d'instructions ; le thread est la plus petite unité du flux d'exécution d'instructions dans le processus et est l'unité de base ; de planification du processeur. Un thread est un processus d'exécution d'une tâche (un segment de programme) ; un thread n'occupe pas d'espace mémoire, il est inclus dans l'espace mémoire du processus. Au sein d'un même processus, plusieurs threads partagent les ressources du processus ; un processus possède au moins un thread.

Explication détaillée de la bibliothèque GUI wxPython en Python Explication détaillée de la bibliothèque GUI wxPython en Python Jun 09, 2023 pm 10:00 PM

Python est un langage de programmation concis, facile à apprendre et efficace. Il est largement utilisé dans divers domaines tels que la science des données, l’intelligence artificielle, le développement de jeux, la programmation réseau, etc. Bien que Python soit livré avec certaines bibliothèques GUI, leurs fonctions sont relativement simples et ne peuvent pas répondre aux besoins de diverses applications complexes. Par conséquent, il existe de nombreuses bibliothèques d’interfaces graphiques parmi lesquelles choisir en Python, parmi lesquelles wxPython en fait partie, que cet article présentera en détail. Introduction à wxPython wxPython est une bibliothèque GUI open source multiplateforme basée sur

See all articles