V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
oursunny
V2EX  ›  Python

python 怎么很好地做到 GUI 和后台程序的协同?

  •  
  •   oursunny · 2015-02-21 22:39:49 +08:00 · 4994 次点击
    这是一个创建于 3564 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我个人觉得是不是用多进程协同比较简单,协同方法有很多,大家有没有什么好的协同例子可以参考一下呢?谢谢大家!注:linux平台
    第 1 条附言  ·  2015-02-22 00:35:59 +08:00
    补充一下,常见的进程协同方式会造成GUI进程的阻塞,这会导致GUI动画的暂停,有什么好方法解决么?
    11 条回复    2015-02-22 20:36:56 +08:00
    tkliuxing
        1
    tkliuxing  
       2015-02-21 22:42:19 +08:00
    啥样的后台程序?多进程我一般用XMLRPC通信,简单明了。
    oursunny
        2
    oursunny  
    OP
       2015-02-21 22:46:55 +08:00
    @tkliuxing 音频处理的,根据不同的音频显示不同的GUI。GUI进程不能被阻塞。
    oursunny
        3
    oursunny  
    OP
       2015-02-21 22:49:56 +08:00
    @tkliuxing 这种通信会造成GUI动画部分被阻塞吗?
    billlee
        4
    billlee  
       2015-02-22 00:41:36 +08:00
    这要看 GUI 是用什么库实现的吧
    比如说用 PyQt/PySide 的时候,在工作线程里处理完成后直接通过 Qt 的 signal 通知 GUI 线程,完全透明
    incompatible
        5
    incompatible  
       2015-02-22 01:13:35 +08:00
    这种要通过异步做啊
    当需要调用后台程序时,不要在gui进程/线程中阻塞调用,而是新起进程/线程异步调用。异步调用结束后,再更新gui
    zerh925
        6
    zerh925  
       2015-02-22 05:26:52 +08:00
    python 2.7 + wxpython 3.0
    我之前做的一个项目,后台属于cpu密集型运算。即使让后台继承multithreading.Thread,还是会造成GUI阻塞,因为多线程还是使用同一个core干活。后来改成multiprocessing,将后台分配到不同的process,每个process都是不同core,可以调用系统监测看到。仅供参考。
    skyline75489
        7
    skyline75489  
       2015-02-22 06:44:56 +08:00
    异步 +1
    ruoyu0088
        8
    ruoyu0088  
       2015-02-22 07:13:23 +08:00
    我用zmq进行进程通信,在GUI线程中用gevent协程管理这些通信通道。

    enotx
        9
    enotx  
       2015-02-22 14:04:33 +08:00 via Android
    写qt的时候全靠qthread和pyqtsignal搞定
    tkliuxing
        10
    tkliuxing  
       2015-02-22 18:18:50 +08:00
    @oursunny 进行RPC调用时开个线程或者协程好了。不过你的问题还需要再详细描述一下。参见5W1H http://wiki.woodpecker.org.cn/moin/5W1H
    Wicked
        11
    Wicked  
       2015-02-22 20:36:56 +08:00 via iPhone
    pyQt召唤你
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   949 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 19ms · UTC 19:34 · PVG 03:34 · LAX 11:34 · JFK 14:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.