Path: csiph.com!fu-berlin.de!uni-berlin.de!not-for-mail From: Peter Otten <__peter__@web.de> Newsgroups: comp.lang.python Subject: Re: python response slow when running external DLL Date: Fri, 27 Nov 2015 13:20:03 +0100 Organization: None Lines: 63 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8Bit X-Trace: news.uni-berlin.de XGlo5i1WsMERUQi3OOJWcAO41ScGh6ZVrNoSY+S5YK9A== Return-Path: X-Original-To: python-list@python.org Delivered-To: python-list@mail.python.org X-Spam-Status: OK 0.000 X-Spam-Evidence: '*H*': 1.00; '*S*': 0.00; 'root': 0.04; '(python': 0.05; 'python3': 0.05; 'scripts': 0.09; 'expected.': 0.09; 'received:80.91': 0.09; 'received:80.91.229': 0.09; 'received:gmane.org': 0.09; 'received:list': 0.09; 'statements': 0.09; 'stdout': 0.09; 'example:': 0.10; 'def': 0.13; 'subject:python': 0.14; 'file,': 0.15; 'cleaner': 0.16; 'code).': 0.16; 'flush().': 0.16; 'received:80.91.229.3': 0.16; 'received:dip0.t-ipconnect.de': 0.16; 'received:io': 0.16; 'received:plane.gmane.org': 0.16; 'received:psf.io': 0.16; 'received:t-ipconnect.de': 0.16; 'run.': 0.16; 'subject:slow': 0.16; 'subject:when': 0.16; 'wrote:': 0.16; 'script.': 0.18; "shouldn't": 0.18; 'fix': 0.21; 'tkinter': 0.22; 'import': 0.24; 'header:User-Agent:1': 0.26; 'header:X-Complaints-To:1': 0.26; 'skip:# 10': 0.27; 'var': 0.27; 'behaviour': 0.29; 'invoke': 0.29; 'code': 0.30; 'writes': 0.30; 'generally': 0.32; 'ideal': 0.32; 'run': 0.33; 'message.': 0.33; 'gets': 0.35; 'label': 0.35; 'replace': 0.35; 'something': 0.35; 'reply.': 0.35; 'url:org': 0.36; 'possible.': 0.36; 'to:addr:python-list': 0.36; 'subject:: ': 0.37; 'thanks': 0.37; 'received:org': 0.37; 'button': 0.38; 'skip:p 20': 0.38; 'test': 0.39; 'does': 0.39; 'to:addr:python.org': 0.40; 'still': 0.40; 'received:de': 0.40; 'chance': 0.60; 'your': 0.60; 'skip:u 10': 0.61; 'show': 0.62; 'complete': 0.63; 'url:htm': 0.75; 'prompt': 0.79; 'conclude': 0.84; 'otten': 0.84; 'peter,': 0.84; 'remark': 0.84; 'subject:response': 0.91 X-Injected-Via-Gmane: http://gmane.org/ X-Gmane-NNTP-Posting-Host: p57bd8207.dip0.t-ipconnect.de User-Agent: KNode/4.13.3 X-BeenThere: python-list@python.org X-Mailman-Version: 2.1.20+ Precedence: list List-Id: General discussion list for the Python programming language List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Xref: csiph.com comp.lang.python:99638 jfong@ms4.hinet.net wrote: > Peter Otten at 2015/11/27 UTC+8 5:19:17 PM wrote: > > Hi! Peter, thanks for your prompt reply. > >> What does var_status.set() do? If it writes to stdout you may just need >> to flush(). > > var_status is a StringVar which binds to a lable's textvariable. I use > this label as the status bar to show message. Can I conclude from the above that you are using tkinter? Widgets can only update when the event loop gets a chance to run. While a quick fix is to invoke update_idletasks() callbacks shouldn't generally contain long-running code that -- as you have seen -- will block the complete user interface. >> Do you see the same behaviour when you replace mydll.SayHello() with >> something simple like time.sleep(1)? > > I use time.sleep(3) to replace mydll.SayHello(), still get the same. > >> As a general remark keep your test scripts as simple as possible. >> Example: If >> >> import mydll >> print("Download...", end="") >> mydll.SayHello() >> print("OK") >> >> showed the same behaviour it would be the ideal test script. > > I run the above statements in a test file, it works as expected. I can > see "Download..." and then "OK". > > Quick-fix example: #!/usr/bin/env python3 import tkinter as tk import time def download(): var.set("Starting download...") root.update_idletasks() time.sleep(3) var.set("... done") root = tk.Tk() var = tk.StringVar() label = tk.Label(root, textvariable=var) label.pack() button = tk.Button(root, text="Download", command=download) button.pack() root.mainloop() A cleaner solution can indeed involve threads; you might adapt the approach from (Python 2 code).